2012-01-24 13 views
4

私は新しい会社で仕事を始めました。私がチームリーダーによって遵守するよう指示されたガイドラインの1つは、保持/解放をほとんど使用せず、代わりにメモリ管理のプロパティに依存しています。私は、コードを明確にし、間違いの余地を少なくするという魅力を見ることができますが、このようなインターフェースを開くと私は不快になります。一般的に建築は非常に良いですが、私はいつも外の世界に私の授業を閉めることについて賢明でした。Obj-C、すべてのプロパティ

このようなプロパティを使用していますか?誰かが私の新しいチームがこの戦略を選んだかもしれないリンクやヒントを私に提供することはできますか?

答えて

10

プロパティを世界全体に公開する必要はありません。あなたの実装.mファイルでは、「プライベート」プロパティを宣言するための小さなカテゴリを追加することができます。例えば。

#import "Class.h" 

@interface Class() 
@property (nonatomic, strong) NSDate *privateProperty 
@end 

@implementation Class 

@synthesize privateProperty; 

... 
@end 

のObjective-CではNothingは、厳格な用語で、これまで実際にプライベートではありませんので、私は、これは良い練習だったと言うだろう - それは、ARC互換のランタイムを必要とせずに、ほぼすべての保持/解放のもののを隠し、持っていますヘッダーにインスタンス変数について言及する必要はありません(これを実現する他の方法はありますが)。

歴史的なメモとして、これはヘッダーからインスタンス変数を移動する最初の方法だと思います。これはiOSと64ビットIntel 10.6以降の「新しい」ランタイムによってのみ許可されているものです。あなたのチームがそれに着手した理由。明示的にクラスを透過的にするように指示していない限り、実装は不透明でなければならないというあなたの気持ち(そして十分に受け入れられたオブジェクト指向の原則)と完全に一致するかもしれません。

+0

これは素晴らしい回答です。ありがとうございます – Sam

2

プロパティを公開する必要はありません。クラスカテゴリまたはクラス拡張を使用すると、プロパティを実装内に配置できます。例えば

:詳細については

// in AnObject.h 
@interface AnObject : NSObject 
@end 

// in AnObject.m 
@interface AnObject() //() is class extension, (foo) is a class category 
@property (retain) NSString *foo; 
@end 

@implementation AnObject 
@synthesize foo; 
@end 

、Appleのドキュメントを参照してください。

関連する問題