OC 30 day
語法:
@interface 本類名()
@end
沒有實現。和本類共享一個實現。
只有一個.h文件。文件名稱:本類名_取得文件名.h。
這個文件中只有Extension的聲明。
@interface Person()
@end
新增一個OC文件,File Type點選 Extension。
生成的getter,setter方法只能在類的內部訪問,不能在外部訪問。
其實,我們可以想: @property生成私有屬性,生成getter setter的實現,不要聲明。
@implementation Person
{
int _age;
}
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
@end
我們可以在 @implementation 裡面聲明一個變數,再賦予他getter與setter。但是這樣又回到了原點,我們想要利用 @property簡化getter與setter的流程。
@interface Person()
@property(nonatomic,assign)int age;
@end
@implementation Person
@end
這個操作有實現,會實現在哪裡呢? @implementation 。
Extension 在100%的情況下不會獨佔一個文件。都是將延展直接寫在本類的實現文件當中。這個時候,寫在延展中的成員,就相當於這個類的私有成員,只能在本類的實現中訪問,外部不能訪問。
如果想要為類寫一個私有屬性,雖然我們可以定義在@implementation之中,但是請不要這麼寫,這樣很不規範。寫一個Extension,定義在Extension當中。
也建議聲明寫在延展當中,實現寫在本類的實現當中。提供代碼的閱讀性。
如果想要為類寫一個私有的 @property 就直接寫在Extension就可以了。
如果類的成員只希望在類的內部訪問,那麼就將其定義在延展中。
如果類的成員允許被外界訪問,定義在本類的interface之中。