私のプロジェクトでは、Interface Builderを使用していませんが、説明の仕方がわからないことに気づきました。まだ。だから、要点まで。IBを使用していて、コントローラーでUILabelやUIButtonなどのユーザーインターフェイスの要素を定義している場合は、この醜いプレフィックスIBOutletと「weak」修飾子を使用します。これは音楽のように機能します。しかし、IBを使用せず、コードからユーザーインターフェイス全体を定義することにした場合、それは機能しません。
UILabelをコントローラーに追加したいとします(IBを使用)。私はこのi*.hファイルのようなものを持っています:
@property (nonatomic, weak) IBOutlet UILabel * label;
そして、*。mファイルでこれ以上何もする必要はありません。しかし、*。xibファイルを削除して、たとえば次のようなinitメソッドの1つでUILabelを設定しようとすると、次のようになります。
self.label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,20)];
self.label.text = @"some text";
[self.view addSubview:self.label];
*.hファイルを次のように変更するまで機能しません。
@property (nonatomic, strong) UILabel * label;
これで、weakとstrongの違いはわかりましたが、IBを使用するときにUI要素にweakを使用できる理由がわかりません。何かがこれらの要素への強力なポインタを維持する必要がありますよね?でもなに?2番目のケースではコントローラーですが、最初のケースでどのように動作するかわかりません。