是否可以檢查並獲取對象初始化的類名稱?如何檢查目標C中初始化的對象是什麼類C
示例:我有Class A.我通過實例方法使用[[ABOBject alloc] init];
創建了對象ABObject。
如何找到創建實例ABObject的類,即「A」?
是否可以檢查並獲取對象初始化的類名稱?如何檢查目標C中初始化的對象是什麼類C
示例:我有Class A.我通過實例方法使用[[ABOBject alloc] init];
創建了對象ABObject。
如何找到創建實例ABObject的類,即「A」?
對象可以在一個類的上下文之外創建,所以它不適合作爲內置語言功能。
如果必須這樣做,解決此問題的一種方法是在任何此類對象實例化後立即使用objc/runtime.h
中的objc_setAssociatedObjects()
函數。例如:
ABObject *object = [[ABObject alloc] init];
objc_setAssociatedObject(object, @"InstantiatingClassKey", [self class], OBJC_ASSOCIATION_ASSIGN);
然後你可以用objc_getAssociatedObject(object, @"InstantiatingClassKey")
得到它。
我認爲你最好重新評估你的設計,因爲這不會特別可維護。即使將其抽取到NSObject
的類別中,以刪除重複的代碼,您仍然需要額外的步驟來記住對象與您的對象之間的奇怪關係。
此外,正如Martin R.在評論中指出的那樣,我正在使用一個快捷方式並傳遞一個字符串作爲該函數的關鍵參數,實際上您會想要遵循使用地址的做法一些靜態或全局變量。
小問題:你的例子依賴於'@「InstantiatingClassKey」'是一個編譯時間常量的事實。我認爲推薦的模式是'objc_setAssociatedObject(object,
@MartinR你絕對正確,我爲了說明的目的採取了一條捷徑。 – 2013-03-17 14:21:11
看一看:http://stackoverflow.com/q/2055940/1758762 – duDE 2013-03-17 13:50:52
你能解釋爲什麼你需要這些信息嗎?它聞起來有一種奇怪的設計。 – 2013-03-17 14:14:08
我需要這個信息,因爲我有一個對象的類,我想在其他類中採取不同的行爲。所以我想把這個小功能硬編碼到它裏面 – s6luwJ0A3I 2013-03-20 02:00:59