一、常见关键字

1、@property  表示自动声明成员变量的set、get方法

2、@protocol  表示协议

3、@required  表示必须实现的方法

4、@optional  表示可实现可不实现的方法

5、@interface 关键字:声明一个 xxx 类。@end 结束声明.

6、@implementation 关键字:表明类的实现 @end 结束

7、@synthesize 关键字: 根据@property 设置,自动实现成员变量的set、get方法,通过点操作符来方便的存取该成员变量。(现在默认会生成带下划线的属性,并通过点操作符存取)

 

二、成员变量属性关键字:

1、readonly :

此标记说明属性是只读的。默认的标记是读写,如果你指定了只读,在@implementation 中只需要一个读取器getter。如果你试图使用点操作符为属性赋值,将得到一个编译错误。

2、readwrite

此标记说明属性可读写的,这也是默认属性。读取器getter、设置器setter都需要在@implementation 中实现。

3、nonatomic:

非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问atomic 。

4、atomic 和 nonatomic

用来决定编译器生成的 getter 和 setter 是否为原子操作。设置成员变量的@property 属性时,默认为 atomic,提供多线程安全。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了 atomic,setter 函数 会变成下面这样:

nonatomic 禁止多线程,变量保护,提高性能。atomic 是防止在写未完成的时候被另外一个线程读取,造成数据错误。 而这种机制是耗费系统资源的,所以在 iPhone 这种小型设备上,如果没有使用多线程间的通讯编程,那么 nonatomic 是一个非常好的选择。

5、assign:

直接进行赋值,这也是默认值,不更改索引计数,适用于基础数据类型 (例如 NSInteger、CGFloat) 和 C 数据类型(int、 float、double、 char等)等简单数据类型。

6、copy:

建立一个索引计数为 1 的对象,然后释放旧对象,在赋值时使用传入值的一份拷贝。拷贝工作由 copy 方法执行,此属性只对那些实行了 NSCopying 协议的对象类型有效

7、retain:

释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为 1,对其他 NSObject 和其子类,对参数进行 release 旧值,再 retain 新值,指定 retain 会在赋值时唤醒传入值的 retain 消息

8、copy 与 retain:

1) Copy 其实是建立了一个相同的对象,而 retain 不是:
比如一个 NSString 对象,地址为 0×1111,内容为@”STR”,Copy 到另外一个 NSString 之后,地址为 0×2222,内容相同,新的对象 retain 为 1,旧有对象 没有变化,retain 到另外一个 NSString 之后,地址相同(建立一个指针,指针 拷贝),内容当然相同,这个对象的 retain 值+1 也就是说,retain 是指针拷贝, copy 是内容拷贝。
2) retain 的 set 方法应该是浅复制,copy 的 set 方法应该是深复制了
3) copy 另一个用法:
copy 是内容的拷贝,对于像 NSString,的确是这样.但是,如果是 copy 的是一个 NSArray 呢?比如:

这个时候,系统的确是为 arr2 开辟了一块内存空间,但是我们要认识到的是,arr2 中的每个元素,只是 copy 了指向arr 中相对应元素的指针。这便是所 谓的”浅复制”。

分类: iOS开发