要描述OC中的类稍微麻烦一点,分2大步骤:类的声明、类的实现(定义)。跟函数类似,函数有分函数的声明和函数的定义。
1、创建一个Car类
- 定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑
- 类名属性的命名规则:标示符的规则
- 类名的命名规范:有意义、驼峰标识、首字母大写
2、代码编写
(1)分析类的3要素
类名:Car
属性:轮胎个数(_wheels)、速度(_speed)
行为:跑(run)
(2)完整地写一个函数:函数的声明和定义(实现);
完整地写一个类:类的声明和实现
(3)类的声明:声明对象的属性、行为(方法)
类的实现:即方法的实现(说清楚方法里面有什么代码)
1 //1.类的声明
2 //声明对象的属性、行为
3 // : NSObject 表示Car类继承基类NSObject,目的是:让Car类具有创建对象的能力(new方法属于类方法,它的声明在基类NSObject)
4 @interface Car : NSObject
5 //{}中用来声明对象属性(成员变量实例变量,默认会初始化为0)
6 {
7 @public//可以让Car类创建的对象的_wheels和_speed属性被外界指针间接访问
8 int _wheels;//轮胎个数
9 int _speed;//速度
10 }
11 //方法(行为):方法名、参数、返回值(声明、实现),不能写在{}里面
12 //只要是OC对象的方法,必须以减号 - 开头
13 //OC方法中任何数据类型都必须用小括号()括起来
14 //OC方法中的小括号():只用来括住数据类型,不要乱用
15 //方法的声明后面不需要{}
16 - (void)run;//跑
17 @end
18
19 //2.类的实现
20 //用来实现@interface中声明的方法
21 @implementation Car
22 //方法的实现(说清楚方法里面有什么代码)
23- (void)run
24{
25 NSLog(@"轮子个数为%i,时速为%ikm/h的车子跑起来了!", _wheels, _speed);
26}
27
28 @end
29
30 int main(int argc, const char * argv[])
31 {
32 //在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]
33 //利用类来创建一个对象
34 //执行了Car这个类的new行为来创建新对象
35 //new方法属于类方法
36
37 //OC中,只能通过指针间接操作对象的成员变量
38 //定义了一个指针变量car1,car1将来指向的是Car类型的对象
39 //[Car new]会创建出一个新对象,并且会返回新对象本身(新对象的地址)
40 Car *car1 = [Car new];
41
42 Car *car2 = [Car new];
43
44 car2 -> _wheels = 5;
45 car2 -> _speed = 300;
46
47
48 //给car1所指向对象的成员变量赋值
49 car1 -> _wheels = 4;
50 car1 -> _speed = 120;
51
52 //car1调用对象方法run
53 //给car1所指向的对象发送一条run消息
54 [car1 run];
55 [car2 run];
56
57 return 0;
58 }
本节重点:
1、类的声明写在@interface和@end之间;类的实现写在@implementation和@end之间。注意@end后面没有;号。
2、: NSObject 表示Car类继承基类NSObject,目的是:让Car类具有创建对象的能力(new方法属于类方法)。
3、类的声明中,{}中只能用来声明对象属性(成员变量/实例变量),默认会初始化为0。
4、@public可以在类的外部通过指针间接访问到对象的成员变量/实例变量。
5、类的声明中,方法(类方法、对象方法)只能写在{}之后,@end之前;注意:方法不能写在{}中。
6、行为(方法),这里暂时只谈对象方法:
1>方法名、参数、返回值(声明、实现),不能写在{}里面。
2>只要是OC对象的方法,必须以减号 - 开头
3>OC方法中任何数据类型都必须用小括号()括起来
4>OC方法中的小括号():只用来括住数据类型,不要乱用
5>方法的声明后面不需要{}
7、类的实现用来实现@interface中声明的方法,方法的实现(说清楚方法里面有什么代码)
8、在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称];利用类来创建一个对象;
执行了Car这个类的new行为来创建新对象;new方法属于类方法。
9、[Car new] 完成了3件事:1>分配存储空间;2>初始化成员变量;3>返回空间地址。
10、成员变量的赋值:利用指针间接操作对象的成员变量
//给car1所指向对象的成员变量赋值
car1 -> _wheels = 4;
car1 -> _speed = 120;
常见错误 :
1.只写了类的声明,没有写实现
2.不能丢了:NSObject
3.不能丢掉@end这个结束符
4.声明与实现不能嵌套使用
5.不能将类的声明或实现放入函数当中
6.属性要写在{}当中
7.属性在声明当中不可以直接赋值
8.错误原因:-[Person run]: unrecognized selector sent to instance 0x100202010'
出现场景:当一个对象或类名调用方法的时候,没有找到这个方法。//五星*****
9.oc的弱语法,没有声明部分,也可以定义类。但是不要这样使用。