gpt4 book ai didi

Objective-C – 委托(delegate)被解除分配?

转载 作者:行者123 更新时间:2023-12-04 06:18:38 24 4
gpt4 key购买 nike

我有一个 View Controller ,它列出了 UITableView 中的一些数据.要下载数据,我使用 ASIHTTPRequest我把哪些方法放在另一个类中。

在我的 View Controller 中,我设置了适当的委托(delegate)来处理从 ASIHTTPRequest 检索的数据。 .所以从我的 View Controller - viewDidLoad我分配并初始化持有 ASIHTTPRequest 的类像这样的方法:

self.officesParser = [[[OfficesParser alloc] init] autorelease]; // retained property

然后在 - viewDidAppear:我调用 [officesParser downloadOffices];
我的 - downloadOffices方法如下所示:
- (void)downloadOffices {

// 1. Downloaded offices.json
NSURL *officesUrl = [NSURL URLWithString:@"http://example.com/example.json"];
ASIHTTPRequest *officesRequest = [ASIHTTPRequest requestWithURL:officesUrl];

// Always ask the server if there is new content available,
// If the request fails, use data from the cache even if it should have expired.
[officesRequest setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];

// Store the cache permanently
[officesRequest setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];

[officesRequest setTag:1];

OfficesViewController *vc = [[OfficesViewController alloc] init];
[officesRequest setDelegate:vc];
[vc release];
[officesRequest startAsynchronous];
}

每次调用 [officesParser downloadOffices]后我得到的方法:
*** -[OfficesViewController respondsToSelector:]: message sent to deallocated instance 0x6a2f6c0

我在这里做错了什么?

最佳答案

你想要vc成为officesRequest的委托(delegate),但是,在分配和初始化 vc 之后并将其设置为委托(delegate),您立即释放它。请注意,委托(delegate)属性通常是 assign ,而不是 retain .然后,您负责保持您的委托(delegate)对象存在,直到不再需要为止。所以,如果你打算在不久的将来向它发送消息,你不能立即释放它。

关于Objective-C – 委托(delegate)被解除分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888443/

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