@property相關知識點

@property有哪些屬性關鍵字?

 

readonly 只讀
assign 單純賦值(非對象類型使用)
unsafe_unretained 同assign一樣 用於ARC
retain 進行對象保持操作
strong 同retain 用於ARC
weak 若引用 用於ARC
copy 複製對象 (生成副本進行賦值,但只適用於遵循NSCopying協議的對象)
nonatomic 非原子操作,非線程安全

atomic

原子操作,主要是在getter和setter方法裏面加鎖

如何讓自己的類用copy修飾符?

1、需要聲明該類遵循NSCopying協議

2、實現NSCopying協議裏的方法,只有一個方法

- (instancetype)copyWithZone:(NSZone *)zone
{
    XXModel *model = [[[self class] allocWithZone:zone] init];
    model.name = self.name;
    model.size = self.size;
    model.objModelArray = [self.objModelArray mutableCopy];

    // 有可能還需要進行深拷貝
    return model;
}

如何重寫帶copy關鍵字的setter

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

@property的本質是什麼?

getter+setter

作用:封裝對象中的數據

編譯器會自動幫你生成一套存取的方法

ivar、getter,setter是如何生成並添加到這個類中的?

編譯器在編譯期間自動合成,當你完成屬性的定義後,編譯器會自動編寫訪問這個屬性所需要的方法。

這個過程除了生成getter、setter之外,編譯器還要自動爲類添加合適類型的實例變量(以_屬性名開頭,當然你可以用@synthesize name = _1name指定實例變量名)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章