美文网首页
copy,retain,assgin,readwrite,rea

copy,retain,assgin,readwrite,rea

作者: 招牌猪 | 来源:发表于2016-03-04 23:03 被阅读116次

    1.assgin只是简单的赋值,不更改索引计数

    2.assgin的情况:NSString *newpt = [pt assing]; 此时newpt和pt完成相同,地址都是OXaaaa,内容为OX1111,即newPt知识pt的别名,对热河一个操作就等于对另一个操作,因此reationCount不需要任何操作

    3.assgin直接赋值

    4.retain使用了引用计数,retain引起引用计数加1,release引用计数减1,当引用计数为0的时候,delloc函数就被调用,内存就会被回收

    5.retain的情况:NSString *newPt = [pt retain];

    此时newPt的地址不再为0Xaaaa,可能为0Xaabb 但是内容依然为0X1111。 因此newPt 和 pt 都可以管理"abc"所在的内存,因此 retainCount需要增加1 ;

    readOnly:

    1.属性只读,默认的标记是读写,如果你制定了只读,在@inplementation中只需要一个读取器,或者如果你使用@synthesize关键字,也是有读取器方法被解析

    readwrite:

    1.说明属性会被当成读写的,这也是默认属性。设置起喝读取器都需要在@implementation中实现,如果使用@synthesize关键字,读取器和设置起都会被解析;

    nonatomic:

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

    weak和strong在property区别(是强引用和弱引用的区别)

    1.weak和strong属性只有在你打开ARC时才会被要求使用,这时你是不能在retain release autorelease操作的,因为ARC会自动为你做好这些操作,但是你需要在对象属性使用weak和strong,其中strong就相当于retain,而weak相当于assign;

    2.只有一种情况你需要使用weak(默认是strong),就是为了避免retain cycles(就是父类中含有子类(父类reatian了子类)),子类又调用了父类(子类又reatin了父类),这样都无法release;

    3. 声明为ARC的指针,指针指向的地址一旦被释放,这些指针都被赋值为nil,这样的好处有效的防治野指针

    ARC(Automatic Reference Counting):

    1.就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地编译完成了。该机能在IOS5.Mac OS X10.7开始导入,利用Xcode4.2以后可以使用该特性。

    strong,weak,copy具体用法:

    1.具体一点:IBOutlet可以为weak,NSString为copy,Delegate一般为weak,其他的看情况,一般来说,类“内部”的属性设置为strong,类外部的属性设置为weak,说道理是一个归属权的问题,小心出现循环引用导致内存无法释放。

    2.不用ARC的话就会看到更多的retain.

    3.如果你写了@synthesize abc = _abc;的话,系统自动帮你声明一个_abc的实例变量。

        使用assign:对基础数据类型(NSInteger)和c数据类型(int,float,double,char,等)

        使用copy:对NSString

        使用retain:对其他NSObjct和其他类

    相关文章

      网友评论

          本文标题:copy,retain,assgin,readwrite,rea

          本文链接:https://www.haomeiwen.com/subject/ipvokttx.html