深入的理解屬性的修飾符(理論篇)

在ARC有效時,其類型上必須附加所有權(quán)修飾符,用來管理屬性在內(nèi)存中的生命周期。
所有權(quán)修飾符一共4種,

______strong
______weak
______unsafe_unreationed
__autoreleasing

屬性聲明的屬性 所有權(quán)修飾符
assign __unsafe_unreationed 修飾符
copy __strong 修飾符 (但是賦值得是被復(fù)制的對象)
reatin __strong 修飾符
strong __strong 修飾符
unsafe_unreatined __unsafe_unreationed 修飾符
weak __weak 修飾符

然后在聲明成員變量時,如果同屬性聲明中的屬性不一致就是引起編譯錯誤。例如:

** 錯誤聲明,同屬性聲明中的屬性不一致 **
<pre> @property (nonatomic,weak) id obj;</pre>

** 正確聲明 **
<pre>@property (nonatomic,weak) id __weak obj;
//或者
@property (nonatomic,strong) id obj;</pre>

然后分別詳細說明所有權(quán)修飾符的使用

__strong

__strong修飾符是 id類型 和 對象類型 的默認(rèn)所有權(quán)修飾符。
<pre> id obj = [[NSObject alloc] init];
等于
id __strong obj = [[NSObject alloc] init];
</pre>

__weak

因為帶有______strong 修飾符的成員變量在持有對象時,很容易發(fā)生循環(huán)引用,循環(huán)引用很容易導(dǎo)致內(nèi)存泄漏(既應(yīng)當(dāng)廢棄的對象在超出其生存周期后繼續(xù)存在)。所以蘋果引入了 ______weak修飾符。
1.若附有______weak修飾符的變量所引用的對象被廢棄,則將nil賦值給該變量。
2.使用附有____weak修飾符的變量,即是使用組成到autoreleasepool中的對象。
通過上面2特性,使用__weak修飾符可避免循環(huán)引用。并且檢查附有__weak修飾符的變量是否為nil,可以判斷被賦值的對象是否已廢棄。

__unsfe_unretained 修飾符

______unsfe_unretained修飾符是不安全的所有權(quán)修飾符,并且附有__unsfe_unretained修飾符的變量不屬于編譯器的內(nèi)存管理對象。
然后在iOS4 以及 OS X Sonw Leopard 的應(yīng)用程序中,必須使用__unsfe_unretained修飾符來替代__weak修飾符。并且注意一點是,賦值給附有__unsfe_unretained修飾符變量的對象在通過該變量使用時,必須確保其確實存在,否則將會引起程序崩潰。

參考:[Objective-C高級編程] 第一章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容