0

*初心者iOSプログラマー、辛抱強く説明してください

Foo、Barの2つのクラスがあるとします

クラス Bar には、初期化中に設定した Foo のインスタンスへのポインターがあります。(そして、Foo と Bar を互いに適切にインポートする方法がわからないため、タイプを Foo ではなく id に設定することになります)

@implementation Bar{
    id pointerToInstanceOfFoo;
}

Bar の dealloc 関数を作成するにはどうすればよいですか? または、dealloc 関数をオーバーライドしますか?

今私は持っています

-(void)dealloc{
    pointerToInstanceOfFoo = NULL;
    [super dealloc];
}

Bar が死亡したときに Foo へのポインターが存在することを望んでいますが、私は正しいことをしていますか? いくつかの質問:

  1. Foo と Bar が相互にインポートする場合、どうすればよいですか? または、これは悪いソフトウェア設計ですか?
  2. 現在、@implementation にポインタ "pointerToInstanceOfFoo" が設定されています...これは、クラス Bar でプライベート ポインタを宣言することと同じですか?
  3. 代わりに使用する必要があり @property (nonatomic, weak) id pointerToInstanceOfFoo ますか?もしそうなら、ARC にウィーク ポインターがないというこのエラーが発生し続けるのはなぜですか?
  4. delete pointerToInstanceOfFoo; dealloc 関数で必要です か??

混乱して申し訳ありませんが、説明/回答をいただければ幸いです!!

PS 私は XCode 4.4 を使用しており、iOS 5.0 で cocos2d v2.1 ベータ版を実行しています... arc を使用していると思います

4

2 に答える 2

3

[super dealloc]ARC での使用は許可されていません。retainしたがって、それがコンパイルされる場合、ARC を使用していないため、 およびへの cals が必要ですrelease。その上でチュートリアル全体を書くことは、スタックオーバーフローの答えに収まるものではありません。他の質問について:

1)ヘッダーファイルではなく、実装ファイルにインポートするだけです。

2) はい

3) それがあなたを幸せにするなら。このエラーはおそらく、ターゲットが iOS 5.0 未満 (つまり、プロジェクト設定の配置ターゲットが 5.0 未満に設定されている) であり、弱いポインターがサポートされていないか、ARC がオフになっていることを意味します。意味がないので、エラーメッセージを正確に報告したとは思いません。

4) 「削除」は有効な目的 c または有効な c ではありません。

PS いいえ、Bar の割り当てが解除された後、そのポインターが存在することは望ましくありません。これは、メモリ リークになるからです。おそらく、インスタンス変数の代わりに静的変数が必要ですか?

于 2012-11-06T23:30:42.297 に答える
1

ボーデンが述べたように、保持/解放とObjective-cのメモリ管理はかなり大きなトピックであり、広く扱われてきました。これを読んで始めて、そこからさらに調査を行うことをお勧めします。

ARCを使用して面倒な作業を省くことができますが(すべきですか?)、定期的な保持/解放サイクルを理解することで、ARCの強/弱参照をよりよく理解できます。ARCを使用している間、Objective-cでのメモリ管理についてすべてを理解する必要はありませんが、それでもいくつかを理解する必要があります。

于 2012-11-06T23:35:41.213 に答える