,自会被保留,如果你访问类变量喜欢这里,它同样喜欢:
- (void)someMethod {
[self doSomething:^(NSObject *someOtherObject) {
self->_someObject = someOtherObject;
}];
}
如果创建的块将自前被破坏,一切都会好的,但如果阻滞活得更长,然后所有其他对自我的引用,自我会留在记忆中,而阻止不会释放它。
我建议使用这一个代码:
@interface SomeClass()
@property (nonatomic, strong)NSObject *someObject;
...
- (void)someMethod {
__weak SomeClass *weak_self = self;
[self doSomething:^(NSObject *someOtherObject) {
weak_self.someObject = someOtherObject;
}];
}
...
或
@interface SomeClass() {
NSObject *_someObject;
}
...
- (void)someMethod {
__weak SomeClass *weak_self = self;
[self doSomething:^(NSObject *someOtherObject) {
__strong SomeClass *strong_self = weak_self;
strong_self->_someObject = someOtherObject;
}];
}
...
只要块没有被“自我”保持,则没有。 – rmaddy 2014-10-28 21:40:37
我们真的需要看看doSomething:正在做什么。 – 2014-10-28 21:41:01
使用属性。简单。 – Fogmeister 2014-10-28 23:28:12