jow*_*wie 0 iphone objective-c retain dealloc ios
我有一个名为JSONNetworkUtility的服务对象,我将它作为ivar存储在我的模型中,以及具有相同名称,非原子和保留的合成属性:
myNetworkUtility = [[JSONNetworkUtility alloc] initNetworkConnectionWithURL:urlString withQueryString:nil delegate:self];
Run Code Online (Sandbox Code Playgroud)
该委托包括两个回调,一个是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!
}
Run Code Online (Sandbox Code Playgroud)
我在该行上得到的错误是:
*** - [MyModel myNetworkUtility]:发送到解除分配的实例0x148190的消息
我完全难过了!关于为什么它在吸气器上失败的任何线索?为什么它会返回一个完全不同的对象?
我使用getter的原因是因为我想使用self.myNetworkUtility = nil所以我可以用一个新对象在属性的顶部写,但我已经把它切回到这个跟踪,我仍然有问题......
谢谢!
我认为问题在于MyModel已被解除分配.当您访问ivar时,对象仍然存在于该内存地址中,内存尚未损坏.但是当发送消息到解除分配的'self'时,运行时会捕获对象被释放的事实.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |