objective-c - Cocoa ivar 在 init 和 drawRect 之间失去值(value)

标签 objective-c cocoa nsview

我不是一个十足的n00b,但我觉得我一定错过了一些重要的东西。我通过类的 init 方法将变量传递到新的类实例中:

@synthesize side;

- (id)initWithSide:(NSString *)aSide frame:(NSRect)frameRect
{
    if (self = [super initWithFrame:(NSRect)frameRect]) {
        self.side = aSide;
    }
    NSLog(@"Side is %@", self.side);
    return self;
}

NSLog() 的输出确实显示了正确的值。现在,随后触发绘制 View 的drawRect:方法具有类似的调用:

- (void)drawRect:(NSRect)rect
{
    NSLog(@"Side is %@", self.side);

这次 NSLog() 报告 Side 为 nil!使用调试器单步执行它,我看到 side 的值被设置,然后它进入寄存器(所有那些我不理解的十六进制代码),然后当它再次跳出到 drawRect: 方法时,该值是根本为零。

如果有人能阐明这一点,我将不胜感激!

干杯, 亚伦

最佳答案

这通常是为 NSString* 编写属性的方法。 allocate 用于基本类型(它不会增加对象的保留计数),并且用于对象的保留或复制。

 @property (readwrite, copy) NSString * side

关于objective-c - Cocoa ivar 在 init 和 drawRect 之间失去值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4567782/

相关文章:

cocoa - El Capitan 破坏了我的 NSView 动画

ios - 如何在 objective-c 中使用 multipart/formdata 发布多个图像

ios - 按值逐步过滤 NSDictionary 作为一种类型

cocoa - 使用钥匙串(keychain)本质上是不安全的(取回元素时?)

objective-c - 在 Cocoa 中查找处理器类型是 PPC 还是 Intel 的最佳方法是什么? (我必须使用碳吗?)

objective-c - 自定义 NSView 在底部栏上填充油漆

cocoa - 在 NSView 中执行拖放时出现 kCGErrorFailure

ios - 如果我将我的应用程序移到后台然后在 iOS 中进入前台,则呈现的 View Controller 会被解散

objective-c - "Non-Activating"中的 NSPanel - 模式并不总是显示正确的光标

objective-c - 使用 Objective C 更新根 Crontab