2015-08-07 2 views
0

Есть ли способ получить доступ к переменной экземпляра объекта Objective C без использования метода @property или метода getter?Доступ к объекту C ivar без метода @property или getter?

У меня есть класс, который должен «сливаться» с другим объектом того же класса. Проблема в том, что мне нужно иметь доступ к ivars «другого» объекта, чтобы объединить его с текущим объектом, но я не хочу объявлять эти ivars как свойство или реализовать какой-либо другой метод getter, потому что Я не хочу, чтобы кто-то думал, что они должны возиться с этими иварами.

Еще раз, мне не нужно обращаться к ivars из любого другого класса, кроме самого этого класса. В качестве примера, вот что я ищу делать:

@interface MySillyObject : NSObject 
{ 
    double _someCounter; 
} 

@implementation 

+ (MySillyObject *)sillyObjectWithCounter:(double)counter 
{ 
    return [[[MySillyObject alloc] initWithCounter:counter] autorelease]; 
} 

- (id)initWithCounter:(double)counter 
{ 
    if (self = [super init]) { 
     _someCounter = counter; 
    } 
} 

- (MySillyObject *)mergeWithOtherObject:(MySillyObject *)otherObject 
{ 
    // What do I do here? 
    // I need to return _someCounter + otherObject's _someCounter... 
    return [MySillyObject sillyObjectWithCounter:???]; 
} 

ответ

0

Вы можете фактически обойти политику доступа Ивар для почти любого объекта какао с valueForKey:; если вы знаете имя свойства или ivar, KVC будет корневаться во внутренних функциях класса и получить значение для вас.

Но в этом случае вам даже не нужно это делать. Поскольку otherObject является членом того же класса, вы можете получить к нему доступ напрямую: otherObject->_someCounter. Вы можете на самом деле получить к нему доступ в том же классе для любого уровня видимости, даже если вы объявите его в the recommended "very private" @implementation block.

Смежные вопросы