試圖使我的OOP基礎強大基於目標C.對不起,如果我的解釋太長。 我在我的應用程序中有3類作爲A類,B類和C類客觀C類。 我有A級的屬性我在執行B類即它使B類的私有財產私人v/s目標C中的公共類屬性
// implementation Class B
@interface ClassB()
@property (nonatomic, strong) ClassA *classA;
@end
我在我的C類方法之一創建B類的一個實例,並且嘗試訪問A級通過B類的實例屬性類C.
// implementation Class C
@interface ClassC()
@property (nonatomic, strong) ClassB *classB;
@end
@implementation ClassC
- (void)someMethod
{
NSString *string = [[NSString alloc] init];
classB = [[ClassB alloc] init];
string = classB.classA.displayString; //get an error here - ClassB doesn't have classA.
}
@end
要避免錯誤我感動的ClassA的財產實施ClassB的到頭。
// header Class B
@interface ClassB : NSObject
@property (nonatomic, strong) ClassA *classA;
@end
但我擔心有人類可以創建B類,接入CLASSA屬性的實例,然後可以使用/修改的是A類的部分屬性
問題:將classA屬性移動到Class B的頭文件中是否是一種很好的樣式,所以我可以在Class C中使用它,或者我應該在Class B中創建一個方法,它會返回我從A類所需的任何內容?喜歡的東西:
@implementation ClassB
- (NSString*)displayStringOfClassA
{
classA = [[ClassA alloc] init];
return self.classA.displayString;
}
@end
我正在研究readonly屬性在客觀C中的工作原理。如果它的只讀屬性允許修改,那麼我喜歡爲字符串創建方法的樣式。但是假設A類有7個與顯示字符串類似的屬性,並且我想要訪問它們,那麼編寫返回所有7個屬性的方法將需要很多代碼。附:我不是在判斷,只是想了解更多。 :) –
只讀意味着只有getter方法可見,而不是該屬性的setter。但是,除非您只是將所有屬性設置爲只讀,否則setter對於ClassA屬性仍然存在。所以另一個類可以做classB.classA.classAProperty = somethingThatYouDoNotWant; – paulrehkugler
我試了一下,你是真的。即使readOnly也可以訪問classA的其他屬性並進行更改。在我的C類中,我嘗試了classB.classA.someOtherProperty = @「更改它」,它確實接受並更改了屬性值。 –