iOS:Class類型屬性的存儲策略

1、前言

有些情況下,我們需要對一個類增加這樣一個成員屬性,用來保存一個類,類似這樣;

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface CustomObject : NSObject

/// 保存類
@property (nonatomic, strong) Class classNmae;

@end

NS_ASSUME_NONNULL_END

2、Class屬性內(nèi)存管理策略選用分析

但是我們需要考慮Class成員屬性的存儲策略strong/assign;
strong:使用strong內(nèi)存管理策略,內(nèi)存開辟在堆區(qū),申請和釋放由開發(fā)者管理,有引用計數(shù)的概念;
assign:使用assign內(nèi)存管理策略,內(nèi)存開辟在棧區(qū),申請和釋放由系統(tǒng)自動管理,引用時引用計數(shù)器不會+1;
下邊這兩種策略在程序上效果一樣,都不會報錯、警告,運行正常;

@property (nonatomic, strong) Class classNmae;
@property (nonatomic, assign) Class classNmae;

3、Class在OC中定義

Class在OC中定義

typedef struct objc_class *Class;

objc_class 結(jié)構(gòu)體定義:

struct objc_class : objc_object { 
  ...
}
/// Represents an instance of a class.
struct objc_object {
    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;
};

可以看出類對象同其他類型對象一樣,都有isa指針成員。

4、總結(jié)

類對象在程序啟動時,會自動為我們創(chuàng)建程序定義的每個類的一個類對象。

Class對象在程序中只存在一份,這整個程序運行期間都不會釋放,所以我們不用關(guān)心類對象引用計數(shù)器的變化,對于Class不管使用strong還是assign修飾,在屬性指向區(qū)域的內(nèi)存管理上效果都是一樣。

最后編輯于
?著作權(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)容