gpt4 book ai didi

objective-c - 委托(delegate)属性未设置?

转载 作者:行者123 更新时间:2023-11-29 04:46:15 25 4
gpt4 key购买 nike

我遇到了一个不知道如何解决的问题。让我给出一些相关代码。

FrontpageViewController(viewDidLoad)

NewsFetcher *newsFetcher = [[NewsFetcher alloc] initWithURL:url];
newsFetcher.delegate = self;
[newsFetcher loadData];

NewsFetcher.h

@property (nonatomic, unsafe_unretained) id <NewsFetcherDelegate> delegate;

我使用 unsafe_unretained 是因为我希望我的应用程序也能在 iOS 4 上运行,同时为了方便起见仍使用 ARC。

NewsFetcher.m

- (id)initWithURL:(NSURL *)url {

self = [super init];

if (self) {

self.url = url;
self.receivedData = [[NSData alloc] init];
}

return self;
}

- (void)loadData {

NSLog(@"%@", self.delegate); // FrontpageViewController, as expected

NSURLRequest *request = [NSURLRequest requestWithURL:self.url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:15];

if (self.connectionInProgress)
[self.connectionInProgress cancel];

self.connectionInProgress = [[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:YES];
}

这一切都运行良好。 NewsFetcher 符合 NSURLConnectionDelegate 协议(protocol),因此下一个调用的方法是 connection:didReceiveData:。但是,当我在该方法中执行另一个 NSLog(@"%@", self.delegate) 时,我会得到不同的结果(EXEC_BAD_ACCESS、NSCFDictionary 等)。我认为这意味着我的 delegate 属性指向一个已释放的对象,这很奇怪,因为它应该是仍在屏幕上的 View Controller (因此不可能被释放,对吧?)。

我的委托(delegate)如何在一种方法中可用,但在下一种方法中不再可用?这与unsafe_unretained有关吗?

最佳答案

调用者不会保留委托(delegate)对象(按照惯例)。期望在您的对象上设置它的调用者将保留它。建议您使用 Instruments 工具来处理僵尸(然后使用泄漏)来查看发生了什么。

关于objective-c - 委托(delegate)属性未设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611518/

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