dict 변수를 초기화하려고하는데 왜 한 방향이 작동하는지 이해하지 못하고 다른 방향은 작동하지 않습니다.블록 내에서 객체 초기화
모든 경우에 문제가 없으며 나중에 dict를 사용할 수 있습니다.
경우 2에서 곧 출시 될 것입니다 (좀비가됩니다) 나중에 (블록 외부에서) 사용하려고하면 프로그램이 중단됩니다.
다음은 ios 용으로 작성된 클래스입니다 (C++와 objective-c가 섞여 있음).
블록 내에서 나는 두 가지 다른 방법으로 변수 사전을 초기화하려고했습니다.
class Data
{
public:
NSMutableDictionary *dict;
void DoSomeStuff()
{
[NSSomeFrameworkTool doSomeStuffWithCompletionHandler:^(NSError *err) {
// case 1 - OK
dict = [[NSMutableDictionary alloc] initWithDictionary:[NSKeyedUnarchiver unarchiveObjectWithFile:@"dict.dat"]];
// case 2 - will crash later if i try to use dict
dict = [NSKeyedUnarchiver unarchiveObjectWithFile:@"dict.dat"]; }];
}
}
이 클래스에는 DoSomeStuff() 메소드에서 초기화되는 클래스 변수 dict가 있습니다.
이 메서드는 블록을 콜백으로 사용하여 일부 작업이 완료되었음을 알리는 ios 프레임 워크의 메서드를 호출합니다.
저는 왜 케이스 1과 케이스 2가 다른지 궁금합니다. 블록 외부에서 참조를 사용하는 것은 금지되어 있습니다.이 블록 내부에서 초기화되었습니다.
case2에 표시된 것과 같은 방식으로 어떤 문제가 있습니까?
실제 충돌의 원인은 무엇입니까? –
안녕하세요. 그 줄은 없어. 내 말은, 블록 밖에서 dict를 나중에 사용하려고 할 때입니다. 예를 들어, 다른 방법으로 : DoSomeStuff2() {[dict count]; }. 그리고 그것은 충돌 할 것입니다 – majakthecoder
ARC를 사용하고 있습니까? –