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

賦值多線程

assign:直接賦值、默認atom

@interface Car : NSObject
{
    NSString *_name;
}


@property (assign,nonatomic) NSString *name;

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

 

retain :保留對象spa

@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];
    }
}

三者的區別code

assign:直接賦值,只是一個別名而已
retain:保留的這個對象,兩個對象指向了同一個位置
copy:開闢了新的內存空間,分別指向了不一樣的內存位置,引用技術分別爲l,
與以前的對象徹底脫離關係。這裏咱們尤爲須要注意,某些時候copy的做用至關於retain。對象



讀寫性
readwrite:可讀可寫、默認blog

readonly: 只讀

原子性
atomic:多線程環境下,存在線程保護內存

noatomic: 多線程環境下,不存在線程保護it

相關文章
相關標籤/搜索