Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否需要参考NSURLConnection?_Objective C_Macos_Delegates - Fatal编程技术网

Objective c 是否需要参考NSURLConnection?

Objective c 是否需要参考NSURLConnection?,objective-c,macos,delegates,Objective C,Macos,Delegates,我是否可以在ApplicationIDFinishLaunching:中使用异步请求创建NSURLConnection对象,而不在实例变量中保留对该对象的引用,如下所示 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSURLConnection *localVariable = [[NSURLConnection alloc] initWithRequest:req delegate:se

我是否可以在
ApplicationIDFinishLaunching:
中使用异步请求创建
NSURLConnection
对象,而不在实例变量中保留对该对象的引用,如下所示

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSURLConnection *localVariable = [[NSURLConnection alloc] initWithRequest:req delegate:self];
}
我相信在不使用ARC的情况下,这应该是可行的。虽然我不再有任何对
NSURLConnection
对象的引用,但它应该完成它的工作,并且不会被释放,直到我在它的一个委托方法中释放它,比如
connectiondFinishLoading:
,因为它离开
applicationdFinishLaunching:
时保留计数为+1,对吗


然而,问题是:这种风格被认为是糟糕的吗?我是否应该始终维护具有这种对象关系的实例变量?我该怎么做才能使ARC起作用?毕竟,当
localVariable
超出范围时,我想ARC会解除分配我的
NSURLConnection

我找不到这方面的正式引用,但似乎用
initWithRequest
创建的
NSURLConnection
会保留对自身的强引用,以防止解除分配。只有在调用最终委托函数或取消连接后,才会删除此引用

(参见例如,或)

因此,您的代码也适用于ARC:即使
localVariable
超出范围,只要连接处于“活动”状态,也会有另一个对该连接的引用


这意味着您不必保留对连接的引用。但它很有用,因为它允许您在必要时取消连接。

我找不到对此的官方参考,但似乎使用
initWithRequest创建的
NSURLConnection
保留了对自身的强引用,以防止其被释放。只有在调用最终委托函数或取消连接后,才会删除此引用

(参见例如,或)

因此,您的代码也适用于ARC:即使
localVariable
超出范围,只要连接处于“活动”状态,也会有另一个对该连接的引用


这意味着您不必保留对连接的引用。但它很有用,因为它允许您在必要时取消连接。

但这也意味着我不应该真正依赖于
NSURLConnection
保留自己,因为它的行为既不明显,也没有正式的文档记录,对吗?
NSURLConnection
如何实现这一点?在实例变量中保持对自身的强引用是否足够?(如果没有ARC,它可以在
init
中简单地调用
[self-retain]
。@tajmahal:我非常确定
NSURLConnection
的行为符合所描述的(也来自我自己的实验),但您当然是对的,它没有文档记录,因此保留引用是安全的方式。-关于你的第二个问题:是的,唯一的方法是连接在实例变量中保持对自身的强引用。但这也意味着我不应该真正依赖于
NSURLConnection
保持自身,因为它的行为既不明显,也没有正式的文档记录,对吗?
NSURLConnection
如何实现这一点?在实例变量中保持对自身的强引用是否足够?(如果没有ARC,它可以在
init
中简单地调用
[self-retain]
。@tajmahal:我非常确定
NSURLConnection
的行为符合所描述的(也来自我自己的实验),但您当然是对的,它没有文档记录,因此保留引用是安全的方式。-对于第二个问题:是的,唯一的方法是连接在实例变量中保持对自身的强引用。