簡體   English   中英

Obj-C,一切的屬性

[英]Obj-C, properties for everything

我已經開始在一家新公司工作,而我的團隊負責人告訴我要遵守的一條指導原則是很少使用保留/發布,而是依賴於內存管理的屬性。 我可以看到保持代碼清晰並減少錯誤空間的吸引力,但打開這樣的界面讓我感到不舒服。 一般來說,建築非常好,但我總是迂腐地把我的課程關閉到外面的世界。

在Objective-c中使用這樣的屬性是一種公認​​的設計方法嗎? 任何人都可以向我提供我的新團隊可能已采用此策略的鏈接或線索嗎?

無需向全世界公開屬性。 在您的實現.m文件中,您可以添加一個類別來聲明“私有”屬性。 例如

#import "Class.h"

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

@implementation Class

@synthesize privateProperty;

...
@end

Objective-C中的任何內容都不是嚴格意義上的私有,所以我認為這是一個很好的做法 - 它幾乎隱藏了所有保留/發布的東西,而不需要兼容ARC的運行時,並且副作用是不要求你在標題中提到你的實例變量(雖然還有其他方法可以實現)。

作為一個歷史記錄,我認為這是將實例變量移出標題的第一種方式 - 這只是iOS和64位Intel 10.6+上的'新'運行時允許的 - 這可能是您團隊的次要原因已經解決了。 除非他們明確告訴你讓你的課程透明化,否則他們實際上可能完全同意你的感覺(以及公認的面向對象原則),實現應該是不透明的。

您無需公開聲明您的財產。 使用類類別或類擴展,您可以將屬性放在實現中。

例如:

// 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的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM