object-c学习笔记

1、所有OC对象所占的内存总是分配在“堆空间”(heap space)中,而绝不会分配在“栈”中,不能在栈中分配OC对象,这点与C++不同:

NSString stackString; //错误,不能在栈空间分配对象;

2、使用类的向前声明(forward declaring)可以节省编译时间,也解决了两个类头文件相互引用的问题;

eg:如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,使用#import而非include指令虽然不会导致死循环,但却意味着两个类里有一个无法被正确编译;如果使用@class在两个类的头文件中相互声明,则不会有问题。

3、OC所有的collection拷贝都是浅拷贝,因为collection中也许会有不支持NSCopying的自定义类;

4、ARC只负责管理Objective-C对象的内存,尤其要注意:CoreFoundation对象不归ARC管理,开发者必须适时调用CFRetain/CGRelease;

5、实现缓存时应选用NSCache而非NSDictionary对象。因为NSCache可以提供优雅的自动删减功能,而且是线程安全的,此外,它与字典不同,并不会拷贝键;

6、计时器会保留其目标对象,等到自身“失效”后再释放此对象;调用invalidate方法可令计时器失效;执行完相关任务后,一次性的计时器也会失效。
注意:开发者若将计时器设置为重复执行模式,那么必须自己调用invalidate方法,才能令其停止;

热评文章