2
我有一個內部使用伊娃的類。我不希望暴露在類(頭)的公共接口伊娃但我聲明,並在實現文件中使用它,就像這樣:是否有可能在類擴展中聲明一個受保護的ivar,並讓超類能夠訪問它或做什麼?
//--------SomeClass.h--------------
@interface SomeClass : NSObject
@end
//--------SomeClass.m--------------
@implementation SomeClass()
{
@protected
NSMutableDictionary *_privateData;
}
@implementation SomeClass
// ...
@end
然後在SomeClass的子類,我嘗試訪問_privateData:
//--------SomeSubClass.m--------------
@implementation SomeSubClass
// ...
- (void)someMethod {
NSLog(@"%@", _privateData); // NOPE
NSLog(@"%@", self->_privateData); // NOPE
NSLog(@"%@", super->_privateData); // NOPE
}
// ...
@end
但我不能。有沒有辦法做到這一點?
是的,我想通;就此而言,另一種選擇是創建私有或「友誼」(術語ala C++)協議。只是想也許有一種解決辦法。 – SaldaVonSchwartz
觀察現代Apple框架的類轉儲CloudKit,看起來他們正在選擇製作其受保護的ivars屬性。這讓我想知道他們是否在訪問子類inits和dealloc中的self.privateData,這通常是不好的做法。 – malhal