7. создание собственного init
#import "Person.h"
@implementation Person
- (id)init {
// сначала инициализируется супер-класс
if (self = [super init])
{
age = 0;
name = @“Bob”;
// другая инициализация...
}
return self;
}
@end
9. управление объектом
• Выделение памяти - alloc
• Освобождение памяти - dealloc
• dealloc никогда не вызывается
самостоятельно! (почти)
10. подсчет использования
• Живой пока count >0
• alloc и copy создают объект с count=1
• retain увеличивает count на 1
• release уменьшает count на 1
• когда count=0 => dealloc
11. пример
Person *person = nil;
person = [[Person alloc] init];
[person setName:@“John Galt”];
[person setAge:32];
[person castBallot];
[person doSomethingElse];
[person release];
21. Autorelease Pools (in pictures)
механизм autorelease
pp zed nt t
ch
a
ali nib e en pp
n iti ain ev ev it a
au in or
dle Ex
L
pp adm it f n
A Lo Wa Ha
Tuesday, January 12, 2010
22. комильфо
• alloc, new или copy возвращают не
autorelease объект
• остальные - autorelease
23. нет autorelease!
• когда нужно хранить объект долго
• вызываем [object retain]
name = [NSMutableString string];
[name retain];
//...
[name release];
24. cвойства
• Доступ к полям объекта
• Простота getter/setter
• Определение политики использования
• Но! можно переопределить get и set
27. атрибуты свойств
• @property int age;
• @property (readonly) BOOL canLegallyVote
• @property (assign) NSString *name;
• @property (retain) NSString *name;
• @property (copy) NSString *name;
• можно самим создать get и set
28. осторожно с dot
в header:
@property int age;
в implementation:
@implementation Person
- (void)setAge:(int)newAge {
self.age = newAge;
@end
Что произойдет?