码迷,mamicode.com
首页 > 其他好文 > 详细

@property的参数

时间:2016-05-12 18:22:21      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

转载请标明出处:
http://blog.csdn.net/xmxkf/article/details/51353580
本文出自:【openXu的博客】

参数类别 参数 说明
原子性 atomic 对属性加锁,多线程下线程安全,默认值
nonatomic 对属性不加锁,多线程下不安全,但速度快
读写属性 readwrite 生成getter、setter方法,默认值
readonly 只生成getter方法
set方法处理 assign 直接赋值,默认值
retain 先release原来的值,再retain新值(包括判断是否为同一个值)
copy 先release原来的值,再copy新值(包括判断是否为同一个值)

copy拷贝(复制)分类:
①、深拷贝(深复制):内容拷贝,会产生新对象
②、浅拷贝(浅复制):指针拷贝,不会产生新对象

至于copy某个对象是深拷贝还是浅拷贝,只需要遵循下面两个原则,然后推测即可。

copy语法的两个原则:
①、新指针和旧指针指向对象的内容要一样
②、修改新指针指向的对象不会影响旧指针指向的对象
修改旧指针指向的对象不会影响新指针指向的对象
比如:

#pragma mark NSString的mutableCopy  深拷贝
void stringMutableCopy(){
    // 不可变的字符串
    NSString *old = [[NSString alloc] initWithFormat:@"Jack"];
    // 拷贝产生了一个可变的字符串,为了修改新指针指向的对象不会影响旧指针指向的对象,所以必须生成一个新的对象(深拷贝)
    NSMutableString *new = [old mutableCopy];
    [new appendString:@" 1234"];
    NSLog(@"old=%@", old);
    NSLog(@"new=%@", new);
    [new release];
    [old release];
}

#pragma mark NSString的copy 浅拷贝(新旧指针指向的字符串都不能改变,所以没必要生成新的对象)
void stringCopy(){
    //不可变字符串
    NSString *old = [[NSString alloc] initWithFormat:@"Jack"];
    // 在这种情况(返回对象本身)下,相当于retain
    NSString *new = [old copy];

    NSLog(@"new-%d", [new retainCount]);
    NSLog(@"old-%d", [old retainCount]);
    NSLog(@"old=%p", old);
    NSLog(@"new=%p", new);

    NSLog(@"old=%@", old);
    NSLog(@"new=%@", new);

    //[old release];
    [new release];
    [old release];
}

在非ARC的情况下:
①、copy:release旧值,copy新值
②、assign:直接赋值
③、retain:release旧值,retain新值

在ARC的情况下:
①、copy:release旧值,copy新值
②、assign:用在基本数据类型上
③、strong:强引用,类似于retain
③、weak:类似于assign(用在对象身上)

使用retain后生成的set方法如下:

- (void)setName:(NSString *)name{
    if (_name != name)
    {
        [_name release];
        _name = [name copy];
    }
}

使用copy后生成的set方法如下:

- (void)setName:(NSString *)name{
    if (_name != name)
    {
        [_name release];
        _name = [name copy];
    }
}

总结:基本数据类型用assign,NSString用copy,ARC下如果需要得到对象的引用(引用计数器+1,宿主在,对象就不会被销毁)用strong,如果不需要则用weak。

@property的参数

标签:

原文地址:http://blog.csdn.net/xmxkf/article/details/51353580

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!