cocoa - UIView绘制矩形;类变量超出范围

标签 cocoa uiview

根据新信息,我的上一个问题的简短而甜蜜的版本。

我有一个带有 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/

相关文章:

iOS UIView : setNeedLayout, setNeedDisplay、layoutSubViews 和 layoutIfNeeded

objective-c - 如何在 Cocoa/Objective C 中通过 NSLog 记录当前行?

objective-c - 为什么我的基于单元格的 NSTableView 调用 viewForTableColumn?

ios - 在上下文中绘制 View ,这是什么意思?

iphone - 来自 socket 的自定义 UIView

swift - UIView.animate 在 vi​​ewDidAppear() 中工作正常,但在其他任何地方都会立即触发

iphone - 将桶形失真应用于 UIView

swift/ cocoa : How to bind a value to currently selected tab

调整父窗口大小时,Cocoa View 不会调整大小

swift - xQuartz 显示不适用于从 Swift Process 启动的 shell 脚本