Category實現類似成員變數效果

2021-08-19 23:01:20 字數 677 閱讀 3033

category是不能新增成員變數方法的。官方沒有給出明確的原因,主流的猜測可能是因為實現category的大部分都是框架中原生的類,比如nsstring,nsdata之類的。如果新增了成員變數,記憶體必然會增大一些。但對於已編譯的那麼多的框架,靜態庫,就沒法處理新的記憶體大小了,申請記憶體之類的就沒法處理了。

但是我們可以通過其他方式動態的實現類似於成員變數的屬性方法的功能。簡單說就是可以存,可以取。運用的是oc中強大的runtime功能。

具體**如下:

.h中**如下

#import static const * frnamekeyobj = & frnamekeyobj;

@inte***ce nsobject (pro2)

@property (nonatomic,copy) nsstring * frname;

@end

.m中**如下

#import "nsobject+pro2.h"

#import @implementation nsobject (pro2)

@dynamic frname;

- (nsstring *)frname

- (void)setfrname:(nsstring *)frname

@end

親測以上**穩定執行

category新增成員變數

oc的category是乙個非常好用的特性,它允許你在不改變原始碼的情況下擴充套件類的一些功能特性,從而能更好地組織你地 但是使用category有乙個很大地限制,不能在category裡新增成員變數,這個限制較大地限制了category的使用,當然使用extension可以往類裡面新增成員變數,但...

Category新增屬性與成員變數

category是objective c中常用的語法特性,通過它可以很方便的為已有的類來新增函式。但是category不允許為已有的類新增新的屬性或者成員變數。一種常見的辦法是通過runtime.h中objc getassociatedobject objc setassociatedobject來...

Category支援新增成員變數

一 類別的作用?分類 category 是有名稱的,分類可以在不修改原來類模型的基礎上拓充方法,不能擴充成員變數 3個作用 1 將類的實現分散到多個不同檔案或多個不同框架中。並且如果類別和原來類中的方法產生名稱衝突,則類別將覆蓋原來的方法,因為類別具有更高的優先順序。分類依賴類而存在,沒有類也就沒有...