Наконец-то управление памятью target-c поймало меня. Я борюсь с проблемой сейчас в течение 2 дней. Я новичок в Objective C и не могу решить проблему самостоятельно.
Похоже, я неосознанно переусердствовал с Объектом.
Если я делаю анализ зомби, я получаю «Сообщение Objective-C было отправлено на освобожденный объект ..»
Это важная часть журнала анализа, я думаю:
Последняя строка с RefCt -1 показывает, что ответственный абонент - [XClass dataset]
набор данных - это NSDictionary, который я использую для хранения данных каждого объекта.
Я использую словарь в двух внешних классах, используя 2 метода
XClass ("updateDictionary:" и "dict:")
Объявление файла:
XClass.h:
...
NSDictionary* dataset;
...
@property (retain) NSDictionary *dataset;
- (id)initWithDeviceValue:(NSDictionary*)DataSet
- (void) updateDictionary:(NSDictionary *)dict;
- (NSDictionary *)dict;
XClass.m:
@synthesize dataset;
-(id)initWithDeviceValue:(NSDictionary*)DataSet{
..
if (self = [super init])
{
dataset = DataSet;}
}
return self;
}
- (void) updateDictionary:(NSDictionary *)dict{
dataset=[NSDictionary dictionaryWithDictionary:dict];
}
-(NSDictionary *)dict{
return dataset;
}
Первый метод extern, вызывающий функцию (dict :), получает правильный словарь.
Вторая функция не получает словарь, потому что она, кажется, выпущена!
Как я уже сказал, последняя строка журнала зомби:
Маллок: Зомби
RefCt: -1 Ответственный вызывающий абонент - [XClass dataset]
Прежние интересные строки:
Строка 2 Зомбилога:
Malloc: CFRetain RefCt: 2 Ответственный абонент: - [набор данных XClass]
Строка 3 Zombielog:
Malloc: Авто-релиз RefCt: пусто Ответственный абонент: - [XClass
набор данных]
Кажется, словарь моего объекта был выпущен автоматически. Может быть, потому что он имел RefCt (сохранить счет?) 2, который был слишком много и поэтому был автоматически выпущен?
Как я могу предотвратить автоматическое освобождение объектов?