OC成員變量(實例變量,屬性)

  • 實例變量(instance variable):由類定義的成員變量,OC中一般聲明在{ }內(nèi)。

  • 屬性(property):編譯器自動將變量的set和get方法的合成,代碼中使用@property,可用點語法讀取,可作為變量使用,可與外界接觸。

  • 關(guān)聯(lián)變量(Associated Object):使用objc_setAssociatedObject運(yùn)行時創(chuàng)建的關(guān)聯(lián)對象,屬于類的成員變量,但是不是屬性。

  • 成員變量(Member variable):類成員變量包含實例變量、屬性和關(guān)聯(lián)變量。


關(guān)于實例變量和屬性,我們看下面這個類

@interface ViewController : UIViewController
{
    int intV;
    NSString *_aaa;
    UIView *_testView;
}

@property (nonatomic, copy) NSString *bbb;
@property (nonatomic, copy) NSString *aaa;

@end

這里我用運(yùn)行時獲取實例:

unsigned int varNumbers;
Ivar *vars = class_copyIvarList(self.class, &varNumbers);

這里varNumbers數(shù)值為4,輸出IvarName是:intV、_aaa、_testView、_bbb,

unsigned int proNumbers;
    objc_property_t *propertys = class_copyPropertyList(self.class, &proNumbers);

獲取屬性數(shù)量為2,分別是aaa和bbb。
這里就發(fā)現(xiàn):

  • 1.屬性@property修飾的變量會自動創(chuàng)建帶下劃線的實例變量:如_bbb。
  • 2.一般情況下,每個屬性變量都對應(yīng)一個實例變量,反之就不一定了。

如果在.m文件中加入以下代碼:

@implementation ViewController

@synthesize bbb=_aaa;
  ...
@end

屬性bbb會關(guān)聯(lián)上實例變量_aaa,導(dǎo)致系統(tǒng)不會自動創(chuàng)建_bbb,這時候用class_copyIvarList運(yùn)行時獲取實例數(shù)量就是3,輸出IvarName是:intV、_aaa、_testView。而屬性變量還是aaa和bbb。

關(guān)聯(lián)變量:

- (void)setNumPro:(int)numPro
{
    objc_setAssociatedObject(self, @selector(numPro), @(numPro), OBJC_ASSOCIATION_ASSIGN);
}

- (int)numPro
{
    return [objc_getAssociatedObject(self, _cmd) intValue];
}

這里通過運(yùn)行時,給self關(guān)聯(lián)了一個numPro變量,用法與屬性一樣,但是不提供實例變量(即不能使用_numPro),使用運(yùn)行時class_copyIvarList、class_copyPropertyList都無法獲取到該對象。

?著作權(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)容

  • @interface Person : NSObject{// 寫在類聲明的大括號中的變量, 稱之為 成員變量(屬...
    左手一只鴨閱讀 340評論 0 1
  • Objective-C語言是一門動態(tài)語言,他將很多靜態(tài)語言在編譯和鏈接時期做的事情放到了運(yùn)行時來處理。這種動態(tài)語言...
    tigger丨閱讀 1,573評論 0 8
  • 前言 相信大家對這兩個詞都不陌生,但是大家會很容易將這兩個詞混淆,所以在探究之前,先來說下什么是成員變量,什么是屬...
    百客閱讀 9,134評論 2 18
  • node本地服務(wù)啟動時,有時會報錯,不知大家有沒有遇到過,下面寫個??來說一下這個現(xiàn)象,以及解決方法。 先來一個簡單...
    34df2971538e閱讀 4,512評論 0 0
  • 這樣上傳圖片以至于清空我的相冊可以留下更加美好的,我挺喜歡的。我去一趟哪里我就拍很多照片,因為有些機(jī)會和有些地方你...
    超級活躍王閱讀 202評論 0 0

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