좋아, 그래서 나는 self
내가 이런 식으로 호출 스택에 깊은 중첩 된 블록 내에서 방법에서 자기에게 메시지를 보낼 방법의 경우에 대한 블록 사이클을 유지하지 않도록하는 방법을 이해 :블록 및 호출 된 메서드에서 자기
- (void)methodA {
__block MyClass *blockSelf = self;
[someObject block:^{
[blockSelf methodB];
}];
}
- (void)methodB {
...
[self methodC];
...
}
- (void)methodC {
}
이 경우 [blockSelf methodB]
은 괜찮 으면서, methodB
에서 [self methodC]
을 보내주기를 유지하고 있습니까? 어디에서나 대답을 찾을 수 없습니다 ...
쿨, 고마워! 이것은 내 도우미 메서드에서 못생긴 "매개 변수 해킹"을 제거합니다 ... – Tom
"거기에 유지주기가 없습니다." 그것은'someObject'가 무엇인지, 그리고 그것이 전달 된 블록을 유지하는지 여부에 달려 있습니다. 'self'가'someObject' (예를 들어, 인스턴스 변수)를 유지하고'someObject'가'block :'에 전달 된 블록을 저장하고 보유하면, 유지 사이클이 생깁니다. – newacct