【发布时间】:2012-09-19 12:53:47
【问题描述】:
我创建了一个 setter 模块,当将任何内容存储到 _textColor 变量中但它不起作用时应该调用它,如果我删除新的 setter 模块并让合成器创建默认模块,那么默认模块将起作用.这样做的问题是,当我有一个名为“fillColor”的变量时,我最终可以访问另一个名为 setFillColor 的模块:
我省略了大部分不相关的代码 在我的头文件中,我有以下内容:
@interface ICADrawingObject : NSObject <NSCoding> {
@private
NSColor *_textColor;
}
@property (nonatomic, retain, readwrite, setter=setObjectTextColor:) NSColor* textColor;
在我的实现中:
@synthesize textColor = _textColor;
-(void)setObjectTextColor:(NSColor *)textColor{
NSLog(@"Text Old Color: %@",self.textColor);
NSLog(@"Text New Color: %@",textColor);
_textColor = textColor;
}
【问题讨论】:
-
只是好奇,你为什么要更改 setter 的名称?这是极其罕见的,并且可能会破坏 KVC 的某些部分(我没有测试过,因为这是一件不寻常的事情)。有时我们会更改 getter 的名称(特别是布尔值),但几乎不会更改 setter 的名称。
-
请注意,如果您直接访问您的 ivars,则无法运行方法。所以当你说“当任何东西被存储到
_textColor变量中时”,这是不可能的。您应该在任何地方使用访问器(除了 init 和 dealloc)。如果纯粹是为了调试,你可以使用 LLDB“观察点”来观察内存何时发生变化。但是,当您在没有访问器的情况下更改 ivar 时,您无法使代码运行。 -
Tbh,我想尝试让 setter 工作,部分原因是为了节省我的工作,而且由于我的同事在整个代码中使用变量名,这会导致很多问题。进一步查看代码,我发现很多问题都是由于绑定到 xib 文件中的变量而发生的,我认为最好的办法就是重命名变量并确保一切安全
-
这不是真的“iphone”和“osx”,是吗?它可能与您的问题无关,但使用正确的标签意味着您会得到正确回答者的注意。
标签: iphone objective-c macos