在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Objective-C Encapsulating Data
1.nonatomic 在Objective-C 中定义的properties 默认是atomic,当然可以通过nonatomic 修饰取消其原子性,带来的好处就是acess nonatomic properties更快。 我发现绝大多数定义在.h文件中定义的property都需要设定成nonatomic。以后需要注意的是哪些property 是不能设置为nonatomic。 注意:atomic 并不意味着线程安全。 2. readonly,readwrite (默认) #.h文件中 readonly 通知编译器,生成public getter方法,不提供public setter 方法,只对内提供setter 方法。 3 const 变量 .h文件定义在@interface 前面的const 修饰的变量 extern NSString * const QuestionsListKey; extern NSString * const QuestionTextKey; extern NSString * const AnswerTextKey; extern NSString * const AnswerKey; .m 对在这些变量进行赋值 NSString * const QuestionsListKey = @"QuestionList"; NSString * const QuestionTextKey = @"QuestionText"; NSString * const AnswerTextKey = @"AnswerText"; NSString * const AnswerKey = @"Answer"; 这就类似C/C++ 中的宏。这些都是只读,如果试图对其修改,编译器会报错。 4 category。 category 另一作用:可以运用于将复杂类的实现分解在多个源文件中。 Best practise:为避免category 命名冲突,可以在方法前面添加三个字母的前缀。 5.@class 与import 区别 @class XYZ 仅仅告诉编译器 XYZ 这是个类,但是编译器完全不知其内部的构造。 即使不存在这个XYZ类,可以通过编译 import “XYZ.h” XYZ 内部的任何的method 和property 对于编译器都是透明的。 6.@synthesize 当我们需要直接 access 实例变量时,需要用下划线作为前缀。以用来区分这是实例变量而非局部变量。 7.Objective-C 内存对象管理 Objective-C内存管理大部分是基于automatic reference counting (ARC),应该避免出现环形强引用,因为这会导致内存泄漏。 ARC 回收机制特点:精度低(无法处理环形引用),执行效率高。除Objective-C runtime 之外 COM模型也采用ARC管理构建。 另外一种回收机制,采用有向图的方法从main 函数开始遍历heap中的对象,回收那些不可达的对象。其精度高,但是效率低。 环形强引用 此时NSTableView 和Delegate 没有外部强引用指向这两者,这两者应该被回收,但是因为Objective-C 的内存管理是基于ARC,那么当出现环形强引用时,无法回收,造成内存泄漏。当然这也是ARC回收机制的弊端。 可以通过使用weak 引用来避免环形强引用。(注意:Cocoa and Cocoa Touch中存在少数不支持weak 引用的类,比如 对于这些类,如果需要使用弱引用,unsafe_unretained 来修饰。但是它与weak 引用的区别在于,当unsafe_unretained指向的对象被回收后,其不被设为nil。 当Delegate 被Deallocated,指向Delegate的 weak 引用被自动设成nil。
8.copy 关键字 很好理解,在堆中维持对象的一个拷贝,任何对原来对象的改变都不会对copy对象产生影响。 被设置成copy的对象,必须要支持NScopying protocol。
//相关神贴: http://stackoverflow.com/questions/322597/class-vs-import?rq=1 http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties |
请发表评论