【问题标题】:setEditable and isEditablesetEditable 和 isEditable
【发布时间】:2011-12-08 02:11:23
【问题描述】:
您好,我是 Objective c 的新手,我在阅读开发人员文档时经常看到这一点。
有名为 setEditable 或 setWhateverName 和 isEditable 或 isWhateverName 的方法
set"blabla"和is"blabla"有什么区别
例如 NSButton 类
-setAlternateTitle
和-alternateTitle
或
NSImageView 类
-isEditable
和-setEditable:
我认为这两个示例中的后者都带有参数,而前者则没有。这是正确的吗?
【问题讨论】:
标签:
objective-c
macos
methods
parameters
【解决方案1】:
这些被称为mutator methods。它们是您用于访问各种Objective-C properties 的方法,它们基本上是类成员变量(所谓的ivars 或实例变量),但您不能直接访问它们.您只能通过 setter 和 getter 方法访问 ivars。
getter 方法获取属性的当前值。对于非布尔属性,它的名称通常与所讨论的属性相同(例如 -alternateTitle),对于布尔属性,它通常被赋予一个带有 is 前缀的名称(例如 -isEditable)。
setter 方法为属性设置一个新值。它通常被赋予以set 为前缀的属性名称,例如-setEditable:.
例如:
if ([myObject isEditable]) // Is the object editable?
/* do stuff */ ;
...
[myObject setEditable:YES]; // Make it editable
【解决方案2】:
-setAlternateTitle 和 -alternateTitle 是基于标准命名约定的默认 setter 和 getter(例如 NSObject 或 int)。
setEditable 和 isEditable 是布尔 (BOOL) 属性的常规设置器和获取器。在布尔情况下,它提高了可读性。请注意,这里的变化仅在 getter 中。
【解决方案3】:
定居者和吸气者有一个模式。
对于非 BOOL 变量
- setter 有一个“set”前缀:“setMyIvar”——注意大写
“米”。
- getter 只是 ivar 名称:“myIvar”——注意没有“get”前缀。 *
这些是属性创建的默认值,例如:
@property (nonatomic, retain) (NSString *)myString;
对于 BOOL ivars,有两种模式:
这些是属性创建的默认值,例如:
@property (nonatomic, assign) (BOOL *)myBoolIvar;
或分别
@property (nonatomic, assign, getter=isMyBoolIvar) (BOOL *)myBoolIvar;