gpt4 book ai didi

iphone - 将 ivars 委托(delegate)为指针

转载 作者:行者123 更新时间:2023-12-01 17:41:34 26 4
gpt4 key购买 nike

我一直在查看我的代码,我通常将我的委托(delegate) ivars 声明为如下指针:

__weak NSObject <ViewControllerDelegate> *delegate;

我注意到 Apple 在他们的示例代码中这样声明它们:
__weak id <ViewControllerDelegate> delegate;

使用 NSObject 或 id 有什么区别?

另外使用 * 声明为指针有什么区别,因为使用委托(delegate)似乎并没有改变它是否是指针,

谢谢,
约翰

最佳答案

id真的是pointer to some random object .

所以,id 之间没有区别和 NSObject*就你是否有指针而言。

否则有很大的不同。
id <MyDelegateP> delegate表示 delegate是一个指向某个对象的指针,它只保证实现 MyDelegateP 中的方法协议(protocol),不多不少。

鉴于 NSObject <MyDelegateP>*表示 delegate是指向某个对象的指针,该对象是 NSObject 的实例(或子类)并且还实现了 MyDelegateP 中的所有方法协议(protocol)。

现在,大多数协议(protocol)都被声明为继承自 <NSObject>协议(protocol)。

@protocol MyDelegateP <NSObject>
@end

由于 <NSObject>协议(protocol)声明了基本服务,如散列、内存管理和自省(introspection)(并且几乎不可能使用不继承自 NSObject 的类)这样做会导致可以放入集合中的委托(delegate),可以自省(introspection)方法实现(用于可选方法)等...

所以,这样做:
 @protocol ViewControllerDelegate <NSObject>
...
@end

然后这个:
__weak id <ViewControllerDelegate> delegate;

但这并没有什么问题(它添加了一些不在 NSObject 协议(protocol)中的方法,并且有点多余,但仍然可以):
__weak NSObject <ViewControllerDelegate> *delegate;

关于iphone - 将 ivars 委托(delegate)为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com