4

私がこのようなプロパティを持っている場合:

@property (nonatomic, retain) UILabel* lblUsername;

viewDidLoadはこれを行う必要があります:

self.lblUsername = [[[UILabel alloc] init...] autorelease];
self.lblUsername.text = @"A label";
self.lblUsername....

または私はこれを行う必要があります:

UILabel* usernameLabel = [[UILabel alloc] init...];
usernameLabel.text = @"A label";
usernameLabel....
self.lblUsername = usernameLabel;
[usernameLabel release];

私は両方を見たことがありますが、どちらを使用すべきかわかりません。どちらを使用することの利点はありますか?(私は両方とも構文が「正しい」ことを知っており、両方とも機能しますが、どちらが好ましいですか?)

4

2 に答える 2

4

私は2番目の方法を好みます。唯一の本当の利点は、自動解放プールへのストレスを軽減することです。これは、このようないくつかのオブジェクトを初期化するだけの場合は最小限です。最初の方法を使用した場合に意図しない動作を引き起こす可能性のある別のスレッドでそのプロパティを変更している可能性は低いですが、それはリスクであると思います。私には、コンポーネントを構築してからインストールすることと、未完成のコンポーネントをインストールしてから所定の場所に構築することの違いのようにも思えます。

于 2012-05-30T19:43:56.580 に答える
2

私は毎回2番目に行きます。半分構築されたオブジェクトをパブリックインターフェイスに固定することはほとんど意味がないという重要な事実に加えて(バグを公開する可能性のあるコードパスがまだない場合でも)、2番目の方法はゼロコストでより効率的です。ごとself.thing.otherThing =に、少なくとも2つのメッセージを送信し、いつかKVOを関与させる場合はさらに多くのメッセージを送信します。その間接化にはまったくメリットがありません。コードをより明確に読み取らせたり、簡潔にしたり、安全にしたりすることはありません。

于 2012-05-30T19:56:03.773 に答える