6

コード ジェネレーターAccessorizerには、IBOutlets を保持するのではなく割り当てるオプションがあります。たとえば、次の 2 つの生成された行を比較します。

@property(nonatomic,retain)IBOutlet UIImageView *backgroundView;
@property(nonatomic,assign)IBOutlet UIImageView *backgroundView;

他のすべてのプロパティを保持しながら、IBOutlets を割り当てる必要があるのはなぜですか?

4

3 に答える 3

15

使用法は、メモリ管理ガイドで指定されているプラ​​ットフォームによって異なります。

「コンセントの動作はプラットフォームに依存するため (「Mac OS X デスクトップ」および「iPhone」を参照)、実際の宣言は異なります。

  For Mac OS X, you should use:

  @property (assign) IBOutlet UserInterfaceElementClass *anOutlet;

  For iPhone OS, you should use:

  @property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;"
于 2010-01-23T01:32:12.560 に答える
4

iPhone OS では、(メモリ不足の状態で) ビューがアンロードされる可能性がありますが、アウトレットに接続されたビューの一部に関心のある状態がある場合は、それを失いたくありません。だからあなたはそれらを保持したい.

ナビゲーションコントローラーと言ってください。ルート ビューは、コントローラに送信されたメモリ不足の警告からアンロードされますが、スタック上にはその上に多数のコントローラがあります。ルートに戻ると、ビューがリロードされ、アウトレットが元の状態に戻ります。

少なくとも、これは技術的な理由だと思います。

しかし、より一般的な意味では、コントローラーはこれらのビューとやり取りしたいので、これらのビューを気にします。そして、その事実だけでも、それらを保持し、気にしなくなったら解放したいということを意味します. それはただの良い習慣です。

于 2010-01-23T01:39:41.870 に答える
-4

IBOutletなしと定義されています。Xcode 内の単語を Command キーを押しながらクリックして、その定義を表示します。

つまり、これは単なるフックであるため、インターフェイス ビルダーはそれを表示することを認識しています。@propertyが含まれている を見たことはありませんが、 IB からアクセスできる必要があるが、実行時に割り当てることもできるのIBOutletような状況向けだと思います。UIViewController@property view

于 2010-01-23T01:40:45.003 に答える