代码改变世界

勤于思考:Objective-C特性的扩展

2014-05-14 15:24  薛凯凯圆滚滚  阅读(170)  评论(0编辑  收藏  举报

赋值

assign:直接赋值、默认

@interface Car : NSObject
{
    NSString *_name;
}


@property (assign,nonatomic) NSString *name;

- (void) setName:(NSString *)name
{
        _name = name;
}

 

retain :保留对象

@interface Car : NSObject
{
    NSString *_name;
}

@property (retain,nonatomic) NSString *name;


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

 

copy: 拷贝对象

@interface Car : NSObject
{
    NSString *_name;
}


@property (copy,nonatomic) NSString *name;


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

三者的区别

assign:直接赋值,只是一个别名而已
retain:保留的这个对象,两个对象指向了同一个位置
copy:开辟了新的内存空间,分别指向了不同的内存位置,引用技术分别为l,
与之前的对象完全脱离关系。这里我们尤其需要注意,某些时候copy的作用相当于retain。



读写性
readwrite:可读可写、默认

readonly: 只读

原子性
atomic:多线程环境下,存在线程保护

noatomic: 多线程环境下,不存在线程保护