Woo*_*ock 1 iphone delegates objective-c ios
我一直在查看我的代码,我通常将我的委托ivars声明为像这样的指针:
__weak NSObject <ViewControllerDelegate> *delegate;
Run Code Online (Sandbox Code Playgroud)
我注意到Apple在他们的示例代码中声明了这样:
__weak id <ViewControllerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
使用NSObject或id有什么区别?
另外,使用*声明为指针之间的区别是什么,因为使用委托似乎没有改变它是否是一个指针,
谢谢,约翰
id真的pointer to some random object.
因此,您是否有指针之间id和之间没有区别NSObject*.
否则会有很大的不同.
id <MyDelegateP> delegatemeans delegate 是一个指向某个对象的指针,只保证在MyDelegateP协议中实现这些方法,不多也不少.
而NSObject <MyDelegateP>*means delegate 是指向某个对象的指针,该对象是NSObject(或子类)的实例,并且还实现MyDelegateP协议中的所有方法.
目前,大多数协议都声明为从<NSObject>协议继承.
@protocol MyDelegateP <NSObject>
@end
Run Code Online (Sandbox Code Playgroud)
由于<NSObject>协议声明了基本服务,如散列,内存管理和内省(并且几乎不可能使用不继承的类NSObject)这样做会导致可以放入集合的委托,可以为方法进行内省实现(可选方法)等...
所以,这样做:
@protocol ViewControllerDelegate <NSObject>
...
@end
Run Code Online (Sandbox Code Playgroud)
然后这个:
__weak id <ViewControllerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
但是这没有任何问题(它添加了一些不在NSObject协议中的方法,并且稍微多余,但仍然可以):
__weak NSObject <ViewControllerDelegate> *delegate;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |