2

それらの技術的な違いは何ですか? Apple が推奨する方法はどれですか?

// 1

@interface CocoaQuizViewController : UIViewController
{
    IBOutlet UILabel *myLabel;
}
@end

// 2

@interface CocoaQuizViewController : UIViewController
{
    IBOutlet UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@end

// 3

@interface CocoaQuizViewController : UIViewController
{
    UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@end

// 4

@interface CocoaQuizViewController : UIViewController

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@end
4

4 に答える 4

3

デフォルトは次のとおりです (アウトレットを xib からソース クラスに直接ドラッグ アンド ドロップすると、自動的に生成されます)。

@interface CocoaQuizViewController : UIViewController

@property (nonatomic, weak) IBOutlet UILabel *myLabel;
@end
于 2013-04-11T11:43:43.113 に答える
2

すべてはまったく問題ありません。

新しい LLVM では、4 番目の作業を行うことになっています。

@interface CocoaQuizViewController : UIViewController

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
//even you use strong and weak intead of retain,assign,copy
@end

以前は、1、2、および 3 を行っていました。現在では、ほとんどのことがコンパイラによって原子的に行われます。そのため、作業がこれまでになく簡単になりました。

XCode4.4以降に付属する新しいコンパイラを使用すると、宣言したすべてのプロパティを自動合成できます。ivar も作成され、プロパティ名のプレフィックスが付けられます。

于 2013-04-11T11:45:21.397 に答える
1

4 つ目は、Apple がすべての開発者にプロパティの使用を推奨しているためです。

于 2013-04-11T11:42:42.787 に答える
1

いくつかの考え:

  1. 4 番目の例は、最初の 3 つの例を悩ませる可能性のあるバグのカテゴリ全体を回避します。そこでは、誤って 2 つの ivar が作成される可能性があります (たとえば、 を省略した@synthesize場合、コンパイラは という ivar を生成し、_myLabelivarmyLabelは使用されません。したがって、冗長になり、混乱の原因となる可能性があるだけです)。

  2. ARC を使用する場合 (可能であれば推奨します)、明らかにそのretain参照は になりweakます。

  3. IBOutletとにかく、自分でコードを「書く」べきではないでしょう。バグを導入する機会にすぎません。IB で、「アシスタント エディター」をクリックして IB の作業中にコードを表示controlし、コントロールからコードにドラッグ (または右クリックしてドラッグ) すると、IB がコードを作成します。画面のスナップショットについては、 https://stackoverflow.com/a/15551101/1271826を参照してください。

于 2013-04-11T11:53:40.720 に答える