gpt4 book ai didi

objective-c - 关于代表的问题

转载 作者:太空狗 更新时间:2023-10-30 03:28:47 25 4
gpt4 key购买 nike

这段代码很简单,对吗?我不知道是否应该保留通过 init 方法传入的委托(delegate)。

@interface SomeClass : NSObject {
SomeClassDelegate *someClassDelegate;
}
-(id)initWithDelegate:(SomeClassDelegate *)delegate;
@end

@implementation SomeClass
-(id)initWithDelegate:(SomeClassDelegate *)delegate
{
[delegate retain]; // should I be doing this?
someClassDelegate = delegate;
}
-(void)dealloc
{
[delegate release]; // obviously only do this if I DO need to retain it
[super dealloc];
}
@end

我最初的想法是否定的,但是这段代码似乎暗示并非如此。我知道我不能依赖保留计数,但我想知道处理委托(delegate)的正确方法。

// self's retain count is 1
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:req delegate:self];
// the retain count is now 2, did the init of URLConnection retain self?

最佳答案

不,一般来说,您不应该保留委托(delegate)。由于委托(delegate)已经引用了您的对象,如果您保留该委托(delegate),您实际上会创建一个循环引用。此外,出于同样的原因,您可以假设您的对象将在委托(delegate)被销毁之前被销毁。

查看 these articles有关使用/实现委托(delegate)的更多信息。

编辑:其他人已经指出了一些异常(exception)情况。

关于objective-c - 关于代表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/764269/

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