Short & сладкий вариант моего последнего вопроса в свете новой информации.UIView drawRect; переменные класса вне сферы действия
У меня есть UIVIew с методом init и drawrect (и другой нитью и связкой других вещей, но я буду держать его коротким & сладким).
Все переменные класса, которые я выделяю, и init в методе init() инициализируются вне области/nil/0x0 в методе drawRect, и я не могу получить к ним доступ.
Например,
В интерфейсе:
NSObject* fred;
В реализации:
-(id)init
{
if(self == [super init])
{
fred = [[NSObject alloc] init];
}
return self;
}
-(void)drawRect:(CGRect)rect
{
NSLog(@"Fred is retained %i times",[fred retainCount]); //FAIL
NSLog(@"But his variable is actually just pointing at uninitialised 0x0, so you're not reading this in the debugger because the application has crashed before it got here."
}
Должен добавить, что инициализации вызывается перед тем DrawRect также. У кого-нибудь есть идеи?
Если он не называет init явно, что возможно. Но инициализация переменной не связана с проблемами области - scope подразумевает, что переменная не объявлена правильно. –
Он вводит в заблуждение область действия с объектом жизни. Объекты какао не умирают от оставления объема. И вызывать 'init' явно в подклассе' UIView'/'NSView', это, как вы говорите, Bad Idea ™. Если fred равно нулю, он никогда не инициализировался; если он был создан и умер; Фред укажет на мусор. –
Я использовал точки останова, чтобы подтвердить выполнение init, и что это до drawRect. – Tobster