1. id类型意味着变量myObject可以是任意类型的对象。所以,当你编译这段代码时,它的实际类型以及它所实现的方法编译器是不知道的。
2. 如果我们在NSString对象上调用NSString类型对象不支持的方法,编译器就会发出警告。
3. 在Objective-C中,所有的对象变量都是指针类型。id类型已经被预定义为指针类型,所以不需要加一个星号。
4. 在任何情况下,在方括号中代码都意味着你是在给一个对象或者一个类型发送一个消息(即一个方法调用)。
5. 点语法只能使用在设置器(setter)和获取器(getter)上,而不能用于普通方法。
6. alloc方法调用,作用是分配内存及实例化一个对象。调用新创建对象的init方法,通常做对象的初始化设置工作,比如创建实例变量。
7. 如果你通过手工alloc的方式创建一个对象,之后你需要release这个对象。同样,你也不能手工释放(release)一个能自动释放(autoreleased)的对象,因为这将会使你的应用程序崩溃。
8. 类的接口(interface)通常存放在类似ClassName.h的文件中,定义实例变量(protected)和公用(public)方法。
类的实现存放在ClassName.m这样的文件中,它包含了这些方法的实际实现代码。它通常还定义了客户类不能访问的私有(private)实体变量、方法。
9. #import指令会自动防止将同一个文件导入多次。
10. Objective-C语言中通常省略方法的“get”前缀。方法名字前面的单个减号(-)表明该方法是一个实例方法。如果方法名字前面是一个加号(+),则表明该方法是一个类(static)方法。
11. 每一个设置器都要处理两个变量,第一个是当前引用的对象,第二个是新输入的对象。在带有垃圾回收机制的环境中,我们可以直接设置成新的值。 但是,如果你不能使用垃圾回收,你需要release旧的对象,并且retain新的对象。
12. 释放一个对象的引用实际上有两种方法:release 和 autorelease。标准的release会立刻释放对象的引用。autorelease会等一会儿才释放,但是引用实际上会一直存在,直到当前方法结束(除非你添加自定义的代码来明确的改变它)。
13. 在设置器里面使用autorelease方法会更加安全一些,因为要改变的变量的新旧两个值可能指向的是同一个对象。而你可能不希望立刻释放实际上你要保留的对象。
14. dealloc方法在一个对象从内存中删除时被调用。通常在这个方法里面释放所有对象里的实例变量。
15. Objective-C的内存管理是基于引用计数的。
16. 分配的(alloc)对象,或者是保留(retain)在一些地方的对象,都需要给他们发送一个release消息。
17. 如果你通过alloc或者copy创建了一个对象,在函数结尾的地方给它发送一个release或者autorelease消息就行了。如果你是通过其它方式创建的对象,就什么也别做。
18. NSLog()函数很像printf()函数,但不同的是要用一个%@符号代表一个对象。NSLog ( @"The current date and time is: %@", [NSDate date] );
19. 只有当访问器不存在的时候,@synthesize才会自动生成访问器,所以,即使是使用@synthesize声明了一个属性,你仍然可以实现自定义的getter和setter。编译器只会自动生成你没有自定义的方法。
20. 在Objective-C中,nil对象的作用等同于很多其他语言的NULL指针。不同的地方在于,在nil上调用方法不会导致程序崩溃或抛出异常。我们不用在调用一个对象的方法之前检查该对象是否为空。如果你调用了一个nil对象的方法并且该方法有返回值的话,你会得到一个nil返回值。
2. 如果我们在NSString对象上调用NSString类型对象不支持的方法,编译器就会发出警告。
3. 在Objective-C中,所有的对象变量都是指针类型。id类型已经被预定义为指针类型,所以不需要加一个星号。
4. 在任何情况下,在方括号中代码都意味着你是在给一个对象或者一个类型发送一个消息(即一个方法调用)。
5. 点语法只能使用在设置器(setter)和获取器(getter)上,而不能用于普通方法。
6. alloc方法调用,作用是分配内存及实例化一个对象。调用新创建对象的init方法,通常做对象的初始化设置工作,比如创建实例变量。
7. 如果你通过手工alloc的方式创建一个对象,之后你需要release这个对象。同样,你也不能手工释放(release)一个能自动释放(autoreleased)的对象,因为这将会使你的应用程序崩溃。
8. 类的接口(interface)通常存放在类似ClassName.h的文件中,定义实例变量(protected)和公用(public)方法。
类的实现存放在ClassName.m这样的文件中,它包含了这些方法的实际实现代码。它通常还定义了客户类不能访问的私有(private)实体变量、方法。
9. #import指令会自动防止将同一个文件导入多次。
10. Objective-C语言中通常省略方法的“get”前缀。方法名字前面的单个减号(-)表明该方法是一个实例方法。如果方法名字前面是一个加号(+),则表明该方法是一个类(static)方法。
11. 每一个设置器都要处理两个变量,第一个是当前引用的对象,第二个是新输入的对象。在带有垃圾回收机制的环境中,我们可以直接设置成新的值。 但是,如果你不能使用垃圾回收,你需要release旧的对象,并且retain新的对象。
12. 释放一个对象的引用实际上有两种方法:release 和 autorelease。标准的release会立刻释放对象的引用。autorelease会等一会儿才释放,但是引用实际上会一直存在,直到当前方法结束(除非你添加自定义的代码来明确的改变它)。
13. 在设置器里面使用autorelease方法会更加安全一些,因为要改变的变量的新旧两个值可能指向的是同一个对象。而你可能不希望立刻释放实际上你要保留的对象。
14. dealloc方法在一个对象从内存中删除时被调用。通常在这个方法里面释放所有对象里的实例变量。
15. Objective-C的内存管理是基于引用计数的。
16. 分配的(alloc)对象,或者是保留(retain)在一些地方的对象,都需要给他们发送一个release消息。
17. 如果你通过alloc或者copy创建了一个对象,在函数结尾的地方给它发送一个release或者autorelease消息就行了。如果你是通过其它方式创建的对象,就什么也别做。
18. NSLog()函数很像printf()函数,但不同的是要用一个%@符号代表一个对象。NSLog ( @"The current date and time is: %@", [NSDate date] );
19. 只有当访问器不存在的时候,@synthesize才会自动生成访问器,所以,即使是使用@synthesize声明了一个属性,你仍然可以实现自定义的getter和setter。编译器只会自动生成你没有自定义的方法。
20. 在Objective-C中,nil对象的作用等同于很多其他语言的NULL指针。不同的地方在于,在nil上调用方法不会导致程序崩溃或抛出异常。我们不用在调用一个对象的方法之前检查该对象是否为空。如果你调用了一个nil对象的方法并且该方法有返回值的话,你会得到一个nil返回值。
21. 与子类不同,你不能通过类目来添加实例变量。但是你能通过类目重写(override)类中已经存在的方法。
22. 在使用引号标记的 C 字符串前面加上 @ 符号,就构成了 static 的 Objective-C 字符串。
23. 属性的参数值可以是:
readwrite(默认)或者 readonly:设置属性是可读写的(拥有 getter/setter)或是只读的(只有 getter);
assign(默认),retain 或 copy:设置属性的存储方式;
nonatomic:不生成线程安全的代码,默认是生成的(没有 atomic 关键字);
getter=…,setter=…:改变访问器默认的名字