У меня есть класс со свойством, которое является слабой ссылкой на блок.
@interface BlockTest : NSObject
@property (nonatomic, weak) void(^testBlock)();
@end
В другой точке класса я использую этот блок следующим образом:
- (void)foobar {
self.testBlock = ^{
[self doSomething];
};
}
Компилятор (Apple LLVM 3.0) жалуется, что может существовать цикл сохранения, потому что self
здесь строго фиксируется.Но я не вижу, как это приводит к циклу сохранения, потому что сам блок является ссылкой __weak
, так что все должно быть в порядке.Если я правильно понял слабые ссылки ARC, когда метод -foobar
возвращает блок, переданный в self.testBlock
, он должен быть освобожден (если не хранится в другом месте) и, таким образом, также освободить self
.
В чем причина, по которой компиляторвсе еще думает, что может быть цикл сохранения?