최근 블록에서 자기를 참조해야 할 때이 트릭을 배웠습니다.ARC로 더블 블록에서 셀프 캡핑하기
__weak MyObject *safeSelf = self;
[self doWithCompletionBlock:^{
HMFInventoryBatchItemsController *strongSelf = safeSelf;
if (strongSelf) {
[strongSelf doSomethingElse];
}
}];
하지만 블록 내에 블록이 있으면 어떻게 될까요? 같은 일을 다시해야합니까?
__weak MyObject *safeSelf = self;
[self doWithCompletionBlock:^{
HMFInventoryBatchItemsController *strongSelf = safeSelf;
if (strongSelf) {
__weak MyObject *saferSelf = strongSelf;
[strongSelf doAnotherThingWithCompletionBlock:^{
HMFInventoryBatchItemsController *strongerSelf = saferSelf;
if (strongerSelf) {
[strongerSelf doSomethingElse];
}
}];
}
}];
또는이 잘
__weak MyObject *safeSelf = self;
[self doWithCompletionBlock:^{
HMFInventoryBatchItemsController *strongSelf = safeSelf;
if (strongSelf) {
[strongSelf doAnotherThingWithCompletionBlock:^{
[strongSelf doSomethingElse];
}];
}
}];
왜 HMFInventoryBatchItemsController로 자기 재 할당 * strongSelf = safeSelf; 자기는 블록의 소유권 이니까? –
당신은 ivar에 액세스하고 싶지 않으면 블록에서 강력한 참조를 만들 필요가 없습니다. – Elden
이 기사를 참조로 찾았습니다. http://amattn.com/2011/12/07/arc_best_practices.html – Hackmodford