Правильный способ изменить переменную экземпляра NSMutableDictionary?

У меня есть Objective-C NSMutableDictionary, объявленный внутри раздела @interface класса, с методами getter/setter, например:

@interface myClass : NSObject
{
     NSMutableDictionary *dict;
}
- (void) setDict: (NSMutableDictionary *) newDict;
- (NSMutableDictionary *) dict;

Внутри некоторых моих методов @implementation я хочу изменить dict. Я хотел бы придерживаться стандартной идиомы Obj-C и изменить ее «правильно». Можно ли изменить его так, используя геттер, но не сеттер:

[[self dict] removeObjectForKey:@"myKey"];

... или есть лучший способ сделать это?


person Dave    schedule 08.09.2009    source источник


Ответы (1)


Это сработает, но почему бы и нет:

[dict removeObjectForKey:@"myKey"];

Внутри реализации класса у вас есть прямой доступ к переменным экземпляра, и их прямое использование является идиоматическим Objective-C.

person mipadi    schedule 08.09.2009
comment
У меня сложилось впечатление, что вы всегда должны обращаться к переменным через их методы Getter, а не напрямую. Однако я очень новичок в этом языке, поэтому я вполне могу ошибаться в этом. - person Dave; 08.09.2009
comment
Нет (обычно) необходимости использовать метод доступа в собственной реализации класса; конечно, внешние классы должны использовать методы доступа. - person mipadi; 08.09.2009
comment
Ах, отлично! Спасибо! Однако возникает вопрос, когда необходимо использовать метод доступа внутри собственной реализации класса? Будет ли это, когда вы, скажем, создали свои собственные методы доступа, которые делают что-то странное, например, увеличивают счетчик при каждом чтении переменной? - person Dave; 08.09.2009
comment
много раз разработчики используют установщики свойств изнутри как простой способ обмануть подсчет ссылок. - person slf; 08.09.2009
comment
Это конкретное использование не имеет ничего общего с обманным подсчетом ссылок, поскольку оно не влияет на счетчик сохранения переменной. Использование сеттера не обман — во многих случаях это новый, умный способ делать что-то. - person Quinn Taylor; 08.09.2009