我目前正在使用API(Insiteo),要求我使用id<ISPInitListener>
。它告诉我在初始化函数中使用它:
id<ISPCancelable> initTask = [[ISInitProvider instance] startAPIWithServerType:ISEServerTypeProd andSiteId:SITE_ID andLanguage:LANGUAGE andInitListener:aListener];
a&#39; aListener&#39;是id<ISPInitListener>
。我可以看到ISPInitListener
是NSObject
,但实际上并不知道在此功能中初始化/使用它的最佳方法?任何人都可以解释这些对象是如何工作的吗?
我目前在ISPInitListener
添加了@interface LONetworkLocationManager () <UITextViewDelegate, UIAlertViewDelegate, ISPInitListener>
,但与ISP相关的代理功能永远不会被调用。
非常感谢任何帮助。
答案 0 :(得分:1)
id
是一种特殊类型,在Objective-C中表示“任何对象类型”。
角括号用于表示协议一致性。
将两者放在一起,id<ISPInitListener>
表示“任何符合ISPInitListener
协议的对象”。
这通常用于指示委托对象的类型,在该类型中,您不关心对象的特定类型,而只关注与定义特定委托的协议的一致性,在本例中为{{ 1}}。
答案 1 :(得分:0)
好的,我想我在http://unixjunkie.blogspot.co.uk/2008/03/id-vs-nsobject-vs-id.html找到了答案:
将对象声明为id告诉编译器您不关心对象是什么类型,但您确实知道它符合指定的NSObject协议**。编译器将确保您分配给该指针的所有对象都符合所需的协议。像这样输入的指针可以安全地保存任何NSObject(因为NSObject符合NSObject协议),但它也可以保存任何NSProxy,因为NSProxy也符合NSObject协议。在英语中,声明id为foo3;说“foo3是指向任何类型的对象的指针,其行为类似于NSObject”。这是非常强大,方便和富有表现力的。实际上,我们通常不关心对象是什么类型,我们只关心它响应我们想要发送它的消息(例如,保留,释放)。