- 1
- 2
- 3
- 4
- 5
- 6
- (void) setStr:(NSString*) strT {
if (strt) {
[_str retain];
_str = strT;
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−106
- (void) setStr:(NSString*) strT {
if (strt) {
[_str retain];
_str = strT;
}
}
чудо сеттер от юниора
10 ударов за проверку на nil, 10 за retain не той переменной и 20 за отсутствие release.
За отсутствие release 19.
Гуглите наказание апостола Павла.
И если без ARC перед вами вас полная программы, то с ним придётся проявлять паранормальные способности, чтобы понять, чтоже там происходит-то.
Сам тоже предпочитаю не пользоваться ARC, но держать код в состоянии, готовом к переходу на ARC за 3 минуты без геморроя. Рецептов то не так много:
1) (Самый важный) Для каждого класса сделать фактори метод, возвращающий autoreleased объект. Отказаться от использования - (id) initWith...
2) Не переопределять сеттеры. Только в краней необходимости и с особым вниманием
3) Инициализировать объекты-свойства только через сеттер: self.myProperty = [MyProperty propertyWith...]
4) В dealloc занулять все свойства: self.myProperty = nil; ...
Платформа cocos2d, к примеру, предполагает повсеместное использование autoreleased объектов (пункт 1), и это очень удобно. В конце концов сейчас, когда пишу что то в UIKit'е, немного бесит отсутствие метода + (instancetype) instanceWith... у большинства классов. Приходится городить alloc - init - autorelease, потому что делать alloc - init, а потом, где нибудь в конце метода release - верный путь получить проект с кучей утечек памяти.
А сеттеры вы как реализовывать будете?
И, как я написал, переопределять сеттер не рекомендуется, и вообще это дурной тон.