Абстрактный класс управления памятью в Какао - PullRequest
2 голосов
/ 18 декабря 2008

При написании абстрактного класса или класса, который не создается непосредственно ... Вы склонны писать метод dealloc в абстрактном классе и выпускать, где необходимо, а затем разрешать детям вызывать [super dealloc] а потом беспокоиться только о тех переменных экземпляра, которые они добавляют, которые не являются частью суперкласса?

Как вы управляете памятью с помощью абстрактных классов?

Я думаю о чем-то вроде:

@interface ClassA : NSObject {
    NSArray *foo;
}
@end

@implementation ClassA
- (void) dealloc {
    [foo release];
    [super dealloc];
}
@end

@interface ClassB : ClassA {
    NSArray *bar;
}
@end

@implementation ClassB
- (void) dealloc {
    [bar release];
    [super dealloc];
}
@end

Прошу прощения за любые синтаксические ошибки, я просто написал это на лету. Имеет ли вышесказанное смысл или память должна управляться по-другому? GC не вариант, так как я делаю это на iPhone.

Ответы [ 2 ]

10 голосов
/ 18 декабря 2008

Да, вы берете на себя ответственность за себя, а не за супер или подклассы.

2 голосов
/ 18 декабря 2008

То же самое, что и Стефан, но под другим углом: старайтесь не помещать alloc и release в разные места, насколько это возможно (init и dealloc - основные исключения). Это удваивает их размещение в разных классах, как в вашем случае с классом и его суперклассом.

Суперкласс не должен освобождать объекты, созданные его подклассами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...