对于存取方法的命名,Cocoa有自己的惯例。在为自己的类编写存取方法时,应当遵守这些惯例,这样你和其他人读代码时才不会感到困惑。
setter 方法根据它所更改的属性的名称来命名,并加上前缀set。下面是几个setter方法的名称:setEngine:、setStringValue:、setFont:、setFillColor:和setTextLineHeight:。
getter 方法则是以其返回的属性名称命名。所以上面的 setter方法所对应的 getter 方法应该是 engine、stringValue、font、fillColor 和 textLineHeight。不要将 get 用作 getter 方法的前缀。例如,方法 getStringValue 和 getFont 就违反了命名惯例。有些语言(如 Java)有不同的命名惯例,它们用 get 做存取方法的前缀。但是如果编写 Cocoa 程序,请不要这么做。
get 这个词在 Cocoa 中有着特殊的含义。如果 get 出现在 Cocoa 的方法名称中,就意味着这个方法会将你传递的参数作为指针来返回数值。例如,NSData (Cocoa中的类,它可以存储任意序列的字节)中有一个 getBytes: 方法,它的参数就是用来存储字节的内存缓冲区的地址。而 NSBezierPath(用于绘制贝塞尔曲线)中的 getLineDash:count:phase: 方法则有三个指针型参数 :指向存储虚线样式的浮点型数组的指针,指向存储虚线样式中元素个数的整数型数据的指针,以及指向虚线起始点的浮点型数据的指针。
如果你在存取方法的名称中使用了 get,那么有经验的 Cocoa 编程人员就会习惯性的将指针当做参数传入这个方法,当他们发现这不过是一个简单的存取方法时就会感到困惑。最好不要让其他编程人员被你的代码搞得一头雾水。
.h 文件:
//
// Person.h
// OC_Practice_03
//
// Created by on 15/4/1.
// Copyright (c) 2015年 . All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name ;
NSString *_gender ;
int _age ;
}
//setter设置器
- (void)setName: (NSString *)name ;
- (void)setGender: (NSString *)gender ;
- (void)setAge: (int)age ;
//getter访问器
- (NSString *)name ;
- (NSString *)gender ;
- (int)age ;
// 初始化
- (instancetype)initWithName: (NSString *)name
gender: (NSString *)gender
age: (int)age ;
- (void)eat ; // 吃
- (void)sleep ; // 睡
@end // Person
.m 文件:
//
// Person.m
// OC_Practice_03
//
// Created by on 15/4/1.
// Copyright (c) 2015年 . All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)setName:(NSString *)name {
_name = name ;
} // setName
- (void)setGender:(NSString *)gender {
_gender = gender ;
} // setGender
- (void)setAge:(int)age {
_age = age ;
} // setAge
- (NSString *)name {
return _name ;
} // getName
- (NSString *)gender {
return _gender ;
} // getGender
- (int)age {
return _age ;
} // getAge
- (instancetype)initWithName:(NSString *)name
gender:(NSString *)gender
age:(int)age {
if ( self = [super init] ) {
_name = name ;
_gender = gender ;
_age = age ;
}
return self ;
} // initWithName
- (void)eat {
NSLog( @"%@在餐厅吃饭!", _name ) ;
} // eat
- (void)sleep {
NSLog( @"%@在睡觉!", _name ) ;
} // sleep
@end // Person