Objective-C----setter 和 getter

命名规范:

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

时间: 2024-12-28 22:50:09

Objective-C----setter 和 getter的相关文章

Objective - C setter,getter与实例变量的关系, 属性, 点语法

什么时setter,getter, 在OC里, 为实例变量赋zhi的方法称作setter(设置器) 读取实例变量值的方法称作getter(访问器) 我们之前写的那些赋值取值的方法都可以称作setter和getter setter.getter的书写格式 OC里规定里setter和getter的书写格式 如果一个实例变量是 int age: 或者int_age: setter的书写格式如下 - (void)setAge:(int)age;即set+首字母大写的实例变量名(忽略下划线) getter

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

如果将synthesize省略,并且我们自己实现setter和getter方法时,系统就不会生成对应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和getter时方法内部实现 - (void)setName:(NSString *)name{ _name = name; } - (NSString *)name{ return _name; } 2,当把语义特性声明为retain时,setter和getter方法内部实现 - (void)set

setter 和 getter 高级 以及内存管理初级

setter 和 getter 的演变,紧接setter 和 getter 初级 [email protected] 和  @synthesize 这两个关键字的出现,就是为了剔除代码中的setter方法和getter方法 @property:可以自动生成某个成员变量的setter和getter声明 @property int age;//相当于下面这两句:- (void)setAge:(int)age;- (int)age; @synthesize自动生成age的setter和getter实现

Objective-C中的setter和getter使用

getter 和 setter 是对实例变量的一个设置和调用的作用 平时我们的实例变量都是@public的形式,这个形势的实例变量谁都可以去修改,跟我们现实中的某种职业一样. 这个时候就体现出封装的作用了,我定义的实例变量只能我让你用,你才能用.我让你怎么去用,你才能怎么取用. 怎么才能实现我的霸权注意呢? 这个时候@protected的作用的出来了.我给我的数据建立了一个笼子.如果你要用需要用我给你的钥匙才能进去用我的东西.这个就是getter ,如果我想让你怎么用,你才能怎么用的时候 这个就

关于setter 和 getter方法的一些总结(初级)

1.最基础的set 和 get 准备工作 Person.h @interface Person : NSObject { NSString *_hobby; // ObjC建议成员变量带"_" @protected // 受保护的 本类以及子类可以访问 NSString *_name; NSString *_gender; @private // 私有的 只有本类可以访问 NSInteger _age; NSInteger _weight; } #pragma mark --- 声明s

Objective-C的setter和getter

一.setter和getter的一般写法 setter和getter器可以说是一个类最基本的东西,任何一门面向对象的语言,都又这个概念,C++.java等等.因为setter和getter是对面向对象语言封装的最基本的支持. 在Objective-C的setter和getter器,当然也和一般的语言没有什么不同.只不过,添加了一些自己的特性. 比如有一个实例变量: 先在.h文件中声明setter和getter器 @property (nonatomic,retain) int age; -(vo

【Java基础】setter与getter方法

1 //下面代码实现设置和获取学生姓名和成绩. 2 class lesson5homework 3 { 4 public static void main(String[] args) 5 { 6 TestCode TC=new TestCode(); 7 TC.StudentTest();//调用测试类 8 } 9 } 10 class Student 11 //设置,获取student值及分别表明name和score值是否正确的Boolean类型的rn和rs 12 { 13 private

OC基础(四)setter和getter方法

setter和getter方法整体声明和实现虽然后面可以用@property代替,但是在后面的iOS开发中,setter方法或getter方法单独使用的频率比较高,应用比较广泛! @Interface Person:NSObject { NSString *_name; int _age; Sex _sex;      //此处枚举类型,属于基本数据类型,不用加“*” float _height; } @end 一.setter方法就是给属性赋值的方法 书写格式: 1.在类的声明中:- (voi

【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier &#39;_name&#39;;did you mean &#39;name&#39;

写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断.然后有时候根据需求,要同时重写属性的setter和getter方法.系统就会报错误::Use of undeclared identifier '_name';did you mean 'name' MARK:如果不想了解太多,直接的解决方法: 在@implementation 实现中添加一行代码就OK了 @sy