[OC Runtime編程指南_翻譯]八丈攒、聲明屬性

[OC Runtime編程指南_翻譯]一切揭、介紹
[OC Runtime編程指南_翻譯]二狞甚、運(yùn)行時(shí)版本和平臺(tái)
[OC Runtime編程指南_翻譯]三、與運(yùn)行時(shí)交互
[OC Runtime編程指南_翻譯]四廓旬、消息傳遞
[OC Runtime編程指南_翻譯]五哼审、動(dòng)態(tài)方法解析
[OC Runtime編程指南_翻譯]六、消息轉(zhuǎn)發(fā)
[OC Runtime編程指南_翻譯]七、類(lèi)型編碼
[OC Runtime編程指南_翻譯]八涩盾、聲明屬性

注:pdf翻譯文檔百度云下載鏈接十气,密碼:zcs2

當(dāng)編譯器遇到屬性聲明(請(qǐng)參閱 _Objective-C _編程語(yǔ)言聲明屬性)時(shí),它會(huì)生成與封閉類(lèi)旁赊、類(lèi)別或協(xié)議相關(guān)聯(lián)的描述性元數(shù)據(jù)桦踊。您可以使用支持在類(lèi)或協(xié)議上按名稱(chēng)查找屬性、以@encode字符串形式獲取屬性類(lèi)型以及以C字符串?dāng)?shù)組形式復(fù)制屬性屬性列表的函數(shù)來(lái)訪問(wèn)此元數(shù)據(jù)终畅。聲明的屬性列表可用于每個(gè)類(lèi)和協(xié)議

屬性類(lèi)型和功能

Property結(jié)構(gòu)定義屬性描述符的不透明句柄竟闪。

typedef struct objc_property *Property;

可以使用函數(shù)class_copyPropertyListprotocol_copyPropertyList分別檢索與類(lèi)(包括加載的類(lèi)別)和協(xié)議相關(guān)聯(lián)的屬性數(shù)組

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
objc_property_t *protocol_copyPropertyList(Protocol *proto, unsigned int *outCount)

例如离福,給定以下類(lèi)聲明:

@interface Lender : NSObject {
    float alone;
}
@property float alone;
@end

可以使用以下方法獲取屬性列表

id LenderClass = objc_getClass("Lender");

unsigned int outCount;

objc_property_t *properties = class_copyPropertyList(LenderClass, &outCount);

您可以使用 property_getName函數(shù)來(lái)發(fā)現(xiàn)屬性的名稱(chēng)

const char *property_getName(objc_property_t property)

可以使用函數(shù)class_getPropertyprotocol_getProperty分別獲取對(duì)類(lèi)和協(xié)議中給定名稱(chēng)的屬性的引用

objc_property_t class_getProperty(Class cls, const char *name)

objc_property_t protocol_getProperty(Protocol *proto, const char *name, BOOL isRequiredProperty, BOOL isInstanceProperty)

可以使用property_getAttributes函數(shù)來(lái)發(fā)現(xiàn)屬性的名稱(chēng)和@encode type字符串。有關(guān)編碼類(lèi)型字符串的詳細(xì)信息炼蛤,請(qǐng)參閱 類(lèi)型編碼妖爷;有關(guān)此字符串的詳細(xì)信息,請(qǐng)參閱 Property Type StringProperty Attribute Description Examples理朋。

const char *property_getAttributes(objc_property_t property)

將這些組合在一起絮识,可以使用以下代碼打印與類(lèi)關(guān)聯(lián)的所有屬性的列表:

id LenderClass = objc_getClass("Lender");

unsigned int outCount, i;

objc_property_t *properties = class_copyPropertyList(LenderClass, &outCount);

for (i = 0; i < outCount; i++) {

    objc_property_t property = properties[i];

    fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));

}

屬性類(lèi)型字符串

可以使用property_getAttributes函數(shù)來(lái)發(fā)現(xiàn)屬性的名稱(chēng)、@encode type字符串以及屬性的其他屬性嗽上。

字符串以T開(kāi)頭次舌,后跟@encode類(lèi)型和逗號(hào),以V結(jié)尾兽愤,后跟支持實(shí)例變量的名稱(chēng)彼念。其中,屬性由以下描述符指定浅萧,用逗號(hào)分隔:

Table 7-1 聲明的屬性類(lèi)型編碼

Code Meaning
R The property is read-only (readonly).屬性為只讀(只讀)逐沙。
C The property is a copy of the value last assigned (copy).
& The property is a reference to the value last assigned (retain).
N The property is non-atomic (nonatomic).
G<name> The property defines a custom getter selector name. The name follows the G (for example, GcustomGetter,).
S<name> The property defines a custom setter selector name. The name follows the S (for example, ScustomSetter:,).
D The property is dynamic (@dynamic).
W The property is a weak reference (__weak).
P The property is eligible for garbage collection.
t<encoding> Specifies the type using old-style encoding.

示例, 請(qǐng)參見(jiàn) Property Attribute Description Examples.

Property Attribute 描述示例

根據(jù)這些定義:

enum FooManChu { FOO, MAN, CHU };

struct YorkshireTeaStruct { int pot; char lady; };

typedef struct YorkshireTeaStruct YorkshireTeaStructType;

union MoneyUnion { float alone; double down; };

下表顯示了示例屬性聲明和屬性property_getAttributes返回的相應(yīng)字符串:

Property declaration Property description
@property char charDefault; Tc,VcharDefault
@property double doubleDefault; Td,VdoubleDefault
@property enum FooManChu enumDefault; Ti,VenumDefault
@property float floatDefault; Tf,VfloatDefault
@property int intDefault; Ti,VintDefault
@property long longDefault; Tl,VlongDefault
@property short shortDefault; Ts,VshortDefault
@property signed signedDefault; Ti,VsignedDefault
@property struct YorkshireTeaStruct structDefault; T{YorkshireTeaStruct="pot"i"lady"c},VstructDefault
@property YorkshireTeaStructType typedefDefault; T{YorkshireTeaStruct="pot"i"lady"c},VtypedefDefault
@property union MoneyUnion unionDefault; T(MoneyUnion="alone"f"down"d),VunionDefault
@property unsigned unsignedDefault; TI,VunsignedDefault
@property int (*functionPointerDefault)(char *); T^?,VfunctionPointerDefault
@property id idDefault;
Note: the compiler warns: "no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed" T@,VidDefault
@property int *intPointer; T^i,VintPointer
@property void *voidPointerDefault; T^v,VvoidPointerDefault
@property int intSynthEquals; In the implementation block: @synthesize intSynthEquals=_intSynthEquals; Ti,V_intSynthEquals
@property(getter=intGetFoo, setter=intSetFoo:) int intSetterGetter; Ti,GintGetFoo,SintSetFoo:,VintSetterGetter
@property(readonly) int intReadonly; Ti,R,VintReadonly
@property(getter=isIntReadOnlyGetter, readonly) int intReadonlyGetter; Ti,R,GisIntReadOnlyGetter
@property(readwrite) int intReadwrite; Ti,VintReadwrite
@property(assign) int intAssign; Ti,VintAssign
@property(retain) id idRetain; T@,&,VidRetain
@property(copy) id idCopy; T@,C,VidCopy
@property(nonatomic) int intNonatomic; Ti,VintNonatomic
@property(nonatomic, readonly, copy) id idReadonlyCopyNonatomic; T@,R,C,VidReadonlyCopyNonatomic
@property(nonatomic, readonly, retain) id idReadonlyRetainNonatomic; T@,R,&,VidReadonlyRetainNonatomic
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市洼畅,隨后出現(xiàn)的幾起案子吩案,更是在濱河造成了極大的恐慌,老刑警劉巖帝簇,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徘郭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡己儒,警方通過(guò)查閱死者的電腦和手機(jī)崎岂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)闪湾,“玉大人冲甘,你說(shuō)我怎么就攤上這事。” “怎么了江醇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵濒憋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我陶夜,道長(zhǎng)凛驮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任条辟,我火速辦了婚禮黔夭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羽嫡。我一直安慰自己本姥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布杭棵。 她就那樣靜靜地躺著婚惫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魂爪。 梳的紋絲不亂的頭發(fā)上先舷,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音滓侍,去河邊找鬼蒋川。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粗井,可吹牛的內(nèi)容都是我干的尔破。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼浇衬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼懒构!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耘擂,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胆剧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后醉冤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秩霍,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蚁阳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铃绒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡螺捐,死狀恐怖颠悬,靈堂內(nèi)的尸體忽然破棺而出矮燎,到底是詐尸還是另有隱情,我是刑警寧澤赔癌,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布诞外,位于F島的核電站,受9級(jí)特大地震影響灾票,放射性物質(zhì)發(fā)生泄漏峡谊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一刊苍、第九天 我趴在偏房一處隱蔽的房頂上張望既们。 院中可真熱鬧,春花似錦班缰、人聲如沸贤壁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至馒索,卻和暖如春莹妒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绰上。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工旨怠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜈块。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓鉴腻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親百揭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爽哎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355