我懷疑這個問題已經被提出並回答了,但是我已經閱讀了很多文章,而且我對這個答案並不完全清楚。objective C,properties vs ivars
我一般覺得很方便的聲明私有變量,實例變量中的my.m文件實現部分,像這樣:
@implementation ViewController {
int someNum;
NSObject *myObj;
}
這是正確的,和或當前最佳實踐?出於某種原因,我是否需要聲明屬性?
我懷疑這個問題已經被提出並回答了,但是我已經閱讀了很多文章,而且我對這個答案並不完全清楚。objective C,properties vs ivars
我一般覺得很方便的聲明私有變量,實例變量中的my.m文件實現部分,像這樣:
@implementation ViewController {
int someNum;
NSObject *myObj;
}
這是正確的,和或當前最佳實踐?出於某種原因,我是否需要聲明屬性?
一種技術是內.m
@interface MyViewController() {
NSInteger someNumber;
NSObject *myObject;
}
@end
@implementation MyViewController
-(void)someMethod {
someNumber++;
}
@end
假設ARC
你會得到強引用的對象類型聲明一個類擴展。這與你所做的沒有任何不同。它只是分離界面和實施更清晰,也適用於如Private Implementation
模式然而,與屬性,你有機會操縱訪問者,你也得到KVC
是免費的。
@interface MyViewController() {
NSInteger someNumber;
}
@property (copy,readwrite,nonatomic) NSObject *myObject;
@end
@implementation MyViewController
-(void)someMethodWhichNeedsACopy:(NSObject *)aobj {
self.myObject = aobj; //free copies , no smudging!
}
@end
而且除了允許您覆蓋
-(void)setMyObject:(NSObject *)aobj
-(NSObject *)myObject
或剛剛訪問隱私伊娃
[_myObject doSomethingCool];
_myObject.thing = something;
或使用KVC由生成的訪問給你
[myViewControllerInstance addObserver:someOtherObject forKeyPath:@"myObject" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]
之後someOtherObject
將收到形式
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
在短的消息。你在做什麼並沒有錯,但還有其他的技術和工具可以用來探索你可以做更多的事情。
非常好,謝謝。 – Mrwolfy 2013-05-09 10:12:22
基本上使用可以提供清晰可維護代碼的樣式。如果你更喜歡公司演出。 – 2013-05-09 10:35:34
在.h文件中聲明變量並將其設置爲@private是較舊的編碼方式。實際上,在你的.m實現中有這些變量是當前的行業標準。 – nik 2013-05-09 09:01:36