标签:
1.readonly是只读
2.readwrite是读写
3.@property关键字:设置成员变量的属性(有读/写,赋值assign,retain,copy ,以及对多线程的支持nonatomic)。
4.nonatomic非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。
5.assign简单赋值,不会引起引用计数的变化。适用于基础类型(NSInteger,CGFloat),C语言里的(int,double,float,char等),就是简单的数据类型。
举个例子说明,给一块申请到的内存alloc一个指针a,然后将a赋给b让b的指针也指向这块内存,两个指针同时指向同一块内存。a指针使用完这块内存以后并不知道b是否还在使用这块内存,将它release掉,这时候就会引起程序崩溃。
6.retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
继续上边的例子,如果a与b都是retain属性的话,内存赋值给a的时候就会引起内存引用计数+1,当a赋值给b的时候,又会引起一次内存引用计数+1.当a用完这块内存以后引用计数-1,此时还剩下1.等到b也用完的时候再减一次1,内存引用计数为0.此时将会释放该内存。
7.copy实际上就是建立了一个相同的对象。将相同的内容在内存上复制一份出来,两个对象的内存地址不同。而retain关键字则是复制了一份指向同一块内存地址的指针,同时引用计数+1. 说简单一点就是copy是复制内容,而retain是复制指针。
8.strong这个是弱引用,引用计数会+1。
例如
会输出什么?
结果是string 2 = String 1
因为string 2 是strong属性,他指向的是String 1这个对象的内存。并且内存引用计数会+1.当self.string1=nil的时候,string1用完了被赋值空,而这块内存的引用计数器并不为0.继续存在,string2指向的这个字符串,所以会打印出这个结果。
9.weak这个是强引用,引用计数不会+1。
例如
会输出什么?
结果是String 2 = null;
self.string1与self.string‘2都是指向同一块存放字符串string 1的内存。string2没有retain内存地址,而self.string1=nil释放了内存,所以string1为nil。string2声明为weak属性,指针指向的内存一旦被释放了,这些指针都将被赋值为nil,这样的好处能有效的防止野指针。
readonly,readwrte,@property,nonatomic,assign,retain,copy,strong,weak属性关键字
标签:
原文地址:http://www.cnblogs.com/huketianxia/p/4747870.html