2010-07-30 104 views
0

如何在objective-c中的對象上創建動態屬性?在ActionScript 我們可以做這樣的事情Objective-c中的動態對象屬性

var obj : Object; 
obj[ "myDynamicProperty" ] = true; 
trace(obj.myDynamicProperty); 

我會怎麼做這在Objective-C?

我曾嘗試以下

NSObject *obj = [[NSObject alloc] init]; 
[obj setValue:@"labelValue" forKey:@"label"]; 

但這只是拋出一個運行時錯誤。 任何幫助將不勝感激。 在此先感謝。

回答

10

Objects-NSObjects,具體在Objective-C不允許使用KVC設置任意屬性;也就是說,它們不是鍵值容器。如果您想要可以接受任意鍵值對的內容,請使用字典(NSMutableDictionary)。

如果您足夠舒適地下降到Obj-C運行時,您也可以使用關聯的對象API。在文檔中搜索objc_setAssociatedObject,查看如何使用此API

3

如果除了任意屬性之外還需要自定義行爲,則可以創建一個decorator對象。製作您自己的包含NSMutableDictionary實例變量的自定義類,然後編寫自己的方法,在該內部字典上簡單調用setValue:forKey:等等。

0

Objective-C中的對象通常不以這種方式工作。它可能與runtime functions,但訴諸運行時功能是尷尬的,通常不是慣用的。如果你想要一個任意的鍵值存儲,使用NSMutableDictionary。

一般來說,Objective-C是一個很好的習慣,所以每個對象都有一組固定的屬性,而不是象我們在ActionScript/Javascript中那樣在ad hoc上加上它們。