我不是一个十足的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/