1.类的声明
1-1@interface开始,@end结束 1-2变量和方法不能混在一起,实例变量必须放在{}内 1-3没有static、const的实例变量。在.m文件中可以声明static静态属性:属于类,不属于对象。同样,也没有const方法,没有友元方法。 1-4“-”声明的方法是protect,“+”声明是public,如果一个方法在.h中没有声明,但在.m中有定义,则只能是.m文件中类内部使用的private方法。所有方法都不能在类的声明中实现。 1-5所有的类都继承自NSObject。 1-6实例变量的默认访问权限是@protected. 1-7方法的返回值类型和参数可以不写,默认是id类型(相当于C++中的void*通用指针类型)。 1-8同一个类内方法不能重载,即方法的签名不能完全一样。
2.类的实现
2-1和.h文件下声明保持签名一致,必须有方法的实现体。如果一个方法在.h中没有声明,但在.m中有定义,则只能是.m文件中类内部使用的private方法。
3.类的实例化 3-1 ObjC中,所有对象都在堆区创建,不能在栈区创建对象。例如:在堆区分配内存,创建对象。 Fraction * frac = [Fraction alloc]init]; 3-2 关于空对象nil。类似于C++ 中的NULL。 区别:nil是一个对象,而NULL只是一个值 NULL==0 nil调用人和方法都不起作用,不产生crash也不抛出异常。 3-3 –alloc方法继承自NSObject,子类不能重载(子类可以重写init方法)。alloc是类方法,只能通过类名调用。 3-4 alloc分配内存后还需要使用init方法将实例变量初始化。
4.消息 ObjC 中最大的特色就是消息传递。 消息的接收者一定是对象。消息接收者的实参可以是消息表达式。
5.对象初始化 5-1对象创建出来以后,对象的内存被初始化为0. 5-2 初始化方法实现(模式): -(id)init { if(self =[super init]) { … } return self; } 5-3 初始化方法可以有多个,一般所有初始化方法都已init开头。参数少的初始化方法可以间接调用初始化参数多初始化方法,实现重用。 5-4 一个类可以多个初始化方法,但只能有一个指定初始化方法。它一般有最多的参数,做最多工作的初始化方法。其他初始化方法可以调用它。
6.属性 6-1 类的实例变量一般为保护或私有,通过对象不能访问这些实例变量,可以通过get或set访问。get和set命名规则:get+实例变量名(首字母大写),set相同原则。 6-2 属性声明机制: @property 类型名 属性名 写在.h中 @synthesize 属性名 写在.m中 @property int age; 默认是可读可写readwrite,即自动生成get和set方法。@property(readonly)intage;只读属性,只生成get方法。@property(writeonly)int age;只可以写属性,只生成set方法。 6-3 属性的访问 stu.age; == [stu age];都是调用get方法 stu.age = 10; == [stu setAge:10]; 都是调用set方法
7.self和super 7-1 self是方法的一个隐藏参数,类似于C++中的this, 在.m文件中 self是指向当前实例的指针,它的值可以改变。(self->age) 当一个方法调用同类中另一个方法时self不可以省略。 ([self initWithAge:20]) 必须使用self指明消息的接受者。 7-2 super是一个编译指示符。它只是告诉编译器,当调用class的方法时,要去调用父类的方法,而不是本类的,但消息接收者依然是本类,即super不改变消息接收者。
|