【发布时间】:2011-10-13 14:22:03
【问题描述】:
我有一个名为 JSONNetworkUtility 的服务对象,我将它作为 ivar 存储在我的模型中,以及具有相同名称、非原子和保留的合成属性:
myNetworkUtility = [[JSONNetworkUtility alloc] initNetworkConnectionWithURL:urlString withQueryString:nil delegate:self];
委托包括两个回调,一个是networkUtility:didFailWithError:,另一个是networkUtility:didFinishWithData:。奇怪的是该属性导致了一些奇怪的错误:
- (void)networkUtility:(JSONNetworkUtility *)networkUtility didFinishWithData:(NSArray *)jsonArray
{
NSLog(@"myNetworkUtility = %@", myNetworkUtility);
// returns <JSONNetworkUtility: 0x3944450>
NSLog(@"networkUtility = %@", networkUtility);
// also returns <JSONNetworkUtility: 0x3944450>
NSLog(@"self.myNetworkUtility = %@", self.myNetworkUtility);
// fails and throws an NSZombie error!
}
我在那条线上得到的错误是:
*** -[MyModel myNetworkUtility]:消息发送到已释放实例 0x148190
我完全被难住了!关于为什么它在吸气剂上失败的任何线索?为什么它返回一个完全不同的对象?
我使用 getter 的原因是因为我想使用 self.myNetworkUtility = nil,所以我可以用一个新对象覆盖属性的顶部,但我已经把它剪回到这个跟踪,我还是有问题...
谢谢!
【问题讨论】:
-
我没有(愚蠢地)提到我以相同的方法向上面的对象发布了一个委托调用,但我没有在上面发布那行。这是发送调用完成的消息,然后释放 MyModel...因此引用 getter 的跟踪失败。
标签: iphone objective-c ios retain dealloc