NSObject 內省方法

2021-07-07 05:17:53 字數 1102 閱讀 1407

內省(introspection)是物件導向語言和環境的乙個強大特性,objective-c和cocoa在這個方面尤其的豐富。內省是物件揭示自己作為乙個執行時物件的詳細資訊的一種能力。這些詳細資訊包括物件在繼承樹上的位置,物件是否遵循特定的協議,以及是否可以響應特定的訊息。nsobject協議和類定義了很多內省方法,用於查詢執行時資訊,以便根據物件的特徵進行識別。

明智地使用內省可以使物件導向的程式更加高效和強壯。它有助於避免錯誤地進行訊息派發、錯誤地假設物件相等、以及類似的問題。

下面的部分將介紹如何在**中有效地使用nsobject的內省方法。

1、iskindofclass:class

檢查物件是否是那個類或者其繼承類例項化的物件

2、ismemberofclass:class

檢查物件是否是那個類但不包括繼承類而例項化的物件

例子:

if ([item iskindofclass:[nsdata class]])
如果item是nsmutabledata類例項化的物件,而該類是nsdata類的子類,那麼[item iskindofclass:[nsdata class]]的值也是true,而[item ismemberofclass:[nsdata class]]的值則為false。

如果item是nsdata類例項化的物件,那麼[item ismemberofclass:[nsdata class]]的值則為true。

3、respondtoselector:selector

檢查物件是否包含這個方法

- (void)docommandbyselector:(sel)aselector  else 

}

4、conformstoprotocol:protocol

檢查物件是否符合協議,是否實現了協議中所有的必選方法。

// ...

if (!([((id)testobject) conformstoprotocol:@protocol(nsmenuitem)]))

NSObject的內省方法

明智地使用內省可以使物件導向的程式更加高效和強壯。它有助於避免錯誤地進行訊息派發 錯誤地假設物件相等 以及類似的問題。下面的部分將介紹如何在 中有效地使用nsobject的內省方法。1 iskindofclass class 檢查物件是否是那個類或者其繼承類例項化的物件 2 ismemberofcl...

究竟是內省還是內省

下面我們就對內省做一下簡單介紹 通過propertydescriptor類操作bean的屬性 通過introspector類獲得bean物件的 beaninfo,然後通過 beaninfo 來獲取屬性的描述器 propertydescriptor 通過這個屬性描述器就可以獲取某個屬性對應的 gett...

NSObject 類的反射,方法反射(十五)

nsobject 類的反射,方法反射用法如下 import ms nsreflect.h import ms person.h import ms student.h implementation ms nsreflect void shownsreflect else 基類 iskindofcla...