简短&根据新信息我最后一个问题的甜蜜版本。
我有一个带有init和drawrect方法的UIVIew(另一个线程和一堆其他东西,但我会保持简短和甜蜜)。
我在 - (id)init方法中分配和init的所有类变量都超出了drawRect方法中的范围/ nil / 0x0,我无法访问它们。
例如;
在界面中:
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 IS。有人有什么想法吗?
答案 0 :(得分:0)
是吗?您是否实际拨打了NSLog
并且已检查?因为我认为它是用initWithFrame:
或其他东西初始化的。
编辑:一些简短的测试表明,问题不在于fred未初始化;如果它是;您不会收到任何错误,因为向nil
发送邮件不会导致崩溃。 (实例变量初始化为nil
)。事实上,正在发生的事情是沿fred
线的某个地方被释放;导致指针指向垃圾而不是对象。 (或者更确切地说,是一个无法再接收消息的乱码或乱码对象。)
您提供的代码不足以找到错误;你将不得不粘贴更多(以及你的应用程序中使用的确切代码)。