考虑以下情况。
-(void) foo {
Object * obj = [[Object alloc] init];
obj.delegate = self;
[obj excuteAsync];
}
-(void) delegateMethodReturned {
// do something
}
这里executeAync会在某段时间后异步返回。因此我们无法安全地释放obj。在没有将obj声明为iVar的情况下实现这种情况的最佳设计模式是什么。
由于
答案 0 :(得分:1)
如果您可以定位iOS4,则可以使用块和GCD绕过异步回调。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^ {
Object * obj = [[Object alloc] init];
[obj excuteSync];
// do something
[obj release];
});
我发现这在某些情况下有帮助,但您的里程可能会有所不同。
答案 1 :(得分:0)
- (void) delegateMethodReturned: (Object *)obj {
[obj release];
}
然而,静态分析器会抱怨这一点,因为它认为你在obj
中泄露了-foo
,你做了。