블록 프로그래밍에 익숙하지 않습니다. 나는 내 리스너 클래스 (호를 사용하지 않는) 코드를 다음 있습니다 : addObserverForName을 사용할 때 유지 사이클 : object : queue : usingBlock :
- (void)someBlock:((void)^(NSDictionary *)myDictionary)myBlock
{
__block Listener *weakSelf = self;
weakSelf = [[NSNotificationCenter defaultCenter]
addObserverForName:@"MyNotification"
object:nil
queue:nil
usingBlock:^(NSNotification *note)
{
//--- Here have the retain cycles
myBlock(note.userInfo);
[[NSNotificationCenter defaultCenter] removeObserver:weakSelf
name:@"MyNotification"];
}];
}
내 DoMyStuff 클래스의
는 :... some code
Listener *myListener = [[[Listener alloc] init] autorelease];
[myListener someBlock:((void)^(NSDictionary *)myDictionary)myBlock{
[self.someProperty doSomething:myDictionary];
}];
는 사람이 나에게 보관주기를 해결하는 올바른 방향을 알 수 있습니까? 나는이 두 가지 질문
- "Correct management of addObserverForName:object:queue:usingBlock:"
- "Why doesn't Remove Observer from NSNotificationCenter:addObserverForName:usingBlock get called"
을 확인했지만 그들은 다른 블록 안에 블록을 사용하지 않았기 때문에, 솔루션은 나를 위해이 작동하지 않습니다.
내 대답이 도움이 될 것입니다. –
'-addObserverForName : object : queue : usingBlock :'은'self'에 대한 참조가 아니라 관찰자 역할을하는 불투명 한 객체에 대한 포인터를 반환한다는 것에주의해야합니다. –
보존주기가 있다고 생각하는 이유는 무엇입니까? – newacct