2013-01-03 14 views
13

、それまでのベストプラクティスれる:.hインタフェースまたは.mファイルの拡張子でプロパティを宣言しますか? Objective-Cで

  1. は、.hの内のボタンなどのオブジェクトを宣言し、その後の.m

    .h 
    @interface SomeViewController : UIViewController 
        @property (strong, nonatomic) UIButton *someButton; 
    @end 
    
    .m 
    @implementation SomeViewController 
        @synthesize someButton = _someButton; 
    @end 
    
  2. かでアイバーズとして宣言して合成します.M

    @interface SomeViewController() 
        @property (strong, nonatomic) UIButton *someButton; 
    @end 
    

私は、具体的thei、アップルのコードの多くであることに気づきますrサンプルコードをブレークすると、そのプロパティの多くがインタフェースで宣言されます。両者に違いはありますか?私はまた、プロパティが@interfaceで宣言されたときに、アンダースコアプレフィックスで自動的に合成され、someButton = _someButton合成が役に立たないことに気付きました。

+2

これらの宣言はいずれもプロパティ宣言です。 ivarは '@ synthesize'によって作成されます。それらは同じように機能します。違いは、他のファイルへの可視性です。 –

答えて

31

まず、as of Xcode 4.4(あなたは両方のセッターとゲッターメソッドを変更しない限り)@synthesizeする必要はもはやあり、どちらか@property@interfaceまたは@implementationの中で宣言されたとき。

@propertyにしかアクセスできない場合は、.mファイルのclass extension@propertyと宣言してください。これにより、カプセル化が提供され、@propertyが別のクラスから使用されていないことが分かりやすくなります。

@propertyが設計上他のクラスで使用されている場合は、.hファイルの@interfaceに定義します。

+1

私はもう "@ synthesisize"を使う必要はほとんどないとコメントしたいと思います。 (場合によっては、Core Dataサブクラスのプロパティやプロパティの読み込みなど、実際にはまだXcodeがこれをよく理解していないので '@ synthesize'を使用する必要があります) –

+0

@ JRG-Developerと全く同意します。 – zaph

+0

+1すてきな説明 – Leena

関連する問題