Нужны ли мне геттеры и сеттеры, если я зависел от сборки мусора в target-c? - PullRequest
0 голосов
/ 02 апреля 2010

Новое в Какао и Objective-c.

Нужны ли мне геттеры и сеттеры, если я зависим от сборки мусора?

Например, безопасно ли просто изменять переменные экземпляра напрямую безсинтаксис точки?

А в методе dealloc можно ли отправить их на ноль вместо релиза (или мне даже нужно их выпускать)?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2010

Свойство (геттеры и сеттеры) является средним значением инкапсуляции, а ivar - деталь реализации.

Доступ через свойства позволяет изменять внутренний дизайн, сохраняя интерфейс неизменным.

Независимо от того, включена программа в GC или нет, вы не должны получать доступ к ivar напрямую (внутренне нормально).

(Кроме того, метод -dealloc игнорируется, если включен GC (не ARC). Вы можете реализовать -finalize. Но GC должен быть достаточно умен, чтобы очищать ненужные ивары, устанавливать ли их nil или нет.

1 голос
/ 02 апреля 2010

Внутри самого класса вы можете напрямую изменять приватные переменные. Подумайте о методах доступа, главным образом, для предоставления общедоступного интерфейса и избегания других классов для непосредственного изменения вашего объекта. Это происходит от объектно-ориентированной парадигмы, а не от управления памятью.

Что касается релиза, то лучше четко понять, как он работает, используя счет сохранения и что влияет на этот счет. Некоторые методы, такие как init extension, сохраняют объект, а некоторые - нет. Множество статических методов, которые возвращают новый готовый к использованию объект, такой как imageWithNamed: возвращают объект автоматического выпуска, который вы должны явно сохранить для владения им.

Лучше всего освобождать и устанавливать в ноль, когда вы передаете право собственности другому объекту (например, массиву)

ех.

NSString *myName   = @"zgueb";
NSArray  *myFamily = [[NSArray alloc] initWithObjects:myName, nil];
// now myName is retained by myFamily, i can release it
[myName release]; 
myName = nil;

Это понятно.

Винс.

...