ARCを使用してObjective-Cでアプリを開発しています。
私の簡略化されたコードは次のようになります。
ClassA(.m)
MyCustomClass *obj = [[MyCustomClass alloc] initWithValue1:@"abc" value2:1000];
MyViewController *vc = [[MyViewController alloc] initWithObject:obj];
// "vc" will become the first item of a UITabBarController
MyViewController(.h)
- (id)initWithObject:(MyCustomClass *)obj {
...
localReferenceToOjbect = obj;
...
}
- (void)viewWillAppear:(BOOL)animated {
// do something with "localRefernceToObject" <---
}
アプリを起動するとゾンビが呼び出されます。ViewControllerが表示されると、「obj」の割り当てが解除されているため、使用できなくなります。
私の回避策は次のとおりです。
ClassA(.h)
@interface ClassA : UIViewController {
MyCustomClass *obj;
}
ClassA(.m)
obj = [[MyCustomClass alloc] initWithValue1:@"abc" value2:1000];
MyViewController *vc = [[MyViewController alloc] initWithObject:obj];
// "vc" will become the first item of a UITabBarController
これは正しい方法ですか?!私はそうは思いません:なぜ私はClassAに役に立たないオブジェクトのインスタンスを保存しなければならないのですか?
実際に何が起こっているのか説明がつかない。私たちを手伝ってくれますか?