根据新信息,我的上一个问题的简短而甜蜜的版本。
我有一个带有 init 和 drawrect 方法的 UIVIew(还有另一个线程和一堆其他东西,但我会保持简短和甜蜜)。
我在 -(id)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."
}
应该补充一点,init 也在drawRect 之前被调用。大家有什么想法吗?
最佳答案
是吗?您是否真的在其中调用了 NSLog
并进行了检查?因为我认为它是用 initWithFrame:
或类似的东西初始化的。
编辑:一些简短的测试表明问题不是 fred 未初始化;而是 fred 未初始化。如果它是;您不会收到任何错误,因为向 nil
发送消息不会导致崩溃。 (实例变量被初始化为nil
)。事实上,正在发生的事情是,fred
沿线的某个地方被释放了;导致指针指向垃圾,而不是对象。 (或者更确切地说,是一个无法再接收消息的乱码或垃圾对象。)
您提供的代码不足以查找错误;您将必须粘贴更多内容(以及应用程序中使用的确切代码)。
关于cocoa - UIView绘制矩形;类变量超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712502/