Objective-C----setter 和 getter

宋宏儒
2023-12-01

命名规范:

对于存取方法的命名,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






 类似资料: