如果本來是在寫 swift,突然看到 @property 一定會不知道這是在做什麼的,為什麼我宣告一個 property 需要設定這麼多個參數? 其實 swift 為了開發者方便,對property 的設定而省略了,這或許是語言上的一個進步吧。
對於 Objective-C 來說,這是個非常基礎的知識,如果你現在寫的是 Objective-C 卻對 @property的知識無法掌握,可以說對於開發 Objective-C 還有一段距離。也因為如此,這題 “@property 使用方法?Copy 什麼時候用?”如此重要,如果這個問題答不出來,也就代表幾乎無法開發 Objective-C,面試上很有可能被篩選掉。
ps:如果你是使用 iVar的元老工程師當然另當別論。
這題就是想要知道,你對 @property的參數暸解多少,在實際的案例中如何去運用。
這題不是什麼高深得技術,不用詳述太多,只要讓面試官知道你對於這個觀念是理解的即可。
可以先簡述 @property 有哪些常用的參數,如: [atomic,nonatomic,weak,strong,assign,copy]
nonatomic 比較有效率,在實際運用上,基本上參數都會帶 nonatomic。
如果 property 希望被持有就用 strong ,否則 weak。
mutable 屬性類型,如果屬性不想被其他關聯改變時,應該用copy。
用來修飾非物件與非指標,如:int,BOOL,float。
「atomic的作用只是給getter和setter加了個鎖」。也就是說,有線程在訪問setter,其他線程只能等待完成後才能訪問。
strong 只能使用在物件類型。基本數據類型(非對像類型,如int, float, BOOL),默認值並不是strong。
weak 被引用時 retain count 不會加1。當物件被銷毀時,該property 會變 nil。
所有有mutable(可變)版本的屬性類型,如NSString, NSArray, NSDictionary等等——他們都有可變的版本類型:NSMutableString, NSMutableArray, NSMutableDictionary。這些類型在屬性賦值時,右邊的值有可能是它們的可變版本。這樣就會出現屬性值被意外改變的可能。所以它們都應該用copy。
可以參考之前分享的文章:
https://ithelp.ithome.com.tw/articles/10254853
這題是非常基礎的問題,務必要熟悉。另外這題還可以延伸出 [iVar getter setter] 的問題,這之後還會提起。