OC - @property与setter,getter方法
2016-01-20 23:46
357 查看
先说说setter与getter方法的作用
先上一段.m/*================================================= 设计一个K线类, 有三个属性, 最高价格, 最低价格, 平均价格. 要求可以设置和获取这三个属性 =================================================*/ // Created by 大L君 on 16/1/20. // Copyright © 2016年 bigL.com. All rights reserved. #import <Foundation/Foundation.h> @interface Kline : NSObject { @protected//保护性 int _valueTheHigh; int _valueTheLow; int _valueAver; } //setter方法声明 -(void)setValueTheHigh : (int)valueTheHigh; -(void)setValueTheLow:(int)valueTheLow; -(void)setValueTheAver:(int)valueTheAver; //getter方法声明 -(int)valueTheHigh; -(int)valueTheLow; -(int)valueTheAver; @end @implementation Kline //setter方法实现 -(void)setValueTheHigh : (int)valueTheHigh { _valueTheHigh = valueTheHigh; } -(void)setValueTheLow:(int)valueTheLow { _valueTheLow = valueTheLow; } -(void)setValueTheAver:(int)valueTheAver { _valueAver = valueTheAver; } //getter方法实现 -(int)valueTheHigh { return _valueTheHigh; } -(int)valueTheLow { return _valueTheLow; } -(int)valueTheAver { return _valueAver; } @end int main(int argc, const char * argv[]) { @autoreleasepool { Kline *kp = [Kline new]; //只能通过setter方法对成员对象赋值 [kp setValueTheHigh:20]; //点语法在=号左边展开为setter方法 kp.ValueTheLow = 10; //只能通过getter方法对成员对象读取 int num = [kp valueTheHigh]; //点语法在=号左边展开为[kp 方法名]; int num2 = kp.valueTheLow; NSLog(@"valueTheHigh : %i",num); NSLog(@"valueTheLow : %i",num2); } return 0; }
/*=================================================
一 . setter方法
作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值命名规范:
必须是对象方法
返回值类型为void
方法名必须以set开头,而且后面跟上成员变量名去掉”_” 首字母必须大写
必须提供一个参数,参数类型必须与所对应的成员变量的类型一致
形参名称和成员变量去掉下划线相同
setter方法的好处
setter方法优点:
不让数据暴露在外,保证了数据的安全性
对设置的数据进行过滤
===============================================/ /
二 .getter方法
作用:为调用者返回对象内部的成员变量的值命名规范:
必须是对象方法
必须有返回值,返回值的类型和成员变量的类型一致
方法名必须是成员变量去掉下划线
一定是没有参数的
getter方法的优点:
可以让我们在使用getter方法获取数据之前,对数据进行加工;
比如双十一活动,我们希望对全线商品的价格在原来的价格基础上打五折,那么我们只要去改成品类的价格的getter方法就可以了,让他返回的值为价格 * 0.5
===============================================//
三 .getter/setter方法注意
在实际的应用中,不一定set和get方法都会提供,如果内部的成员变量,比如学生的学号或计算出来的数据。这样的数据只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法 。成员变量名的命名以下划线开头,get方法名不需要带下划线
成员变量名使用下划线开头有两个好处 :
a. 与get方法的方法名区分开来
b. 可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。当我看到以下划线开头变量,那么他一定是成员变量
=================================================*/
@property与setter/getter方法
将上面的.m改写用@property/*=================================================== 设计一个K线类, 有三个属性, 最高价格, 最低价格, 平均价格. 要求可以设置和获取这三个属性 ===================================================*/ // Created by 大L君 on 16/1/20. // Copyright © 2016年 bigL.com. All rights reserved. #import <Foundation/Foundation.h> @interface Kline : NSObject //@property 生成setter/getter方法声明与方法实现 @property int valueTheHigh; @property int valueTheLow; @property int valueTheAver; @end @implementation Kline @end int main(int argc, const char * argv[]) { @autoreleasepool { Kline *kp = [Kline new]; //只能通过setter方法对成员对象赋值 [kp setValueTheHigh:20]; //点语法在=号左边展开为setter方法 kp.valueTheLow= 10; //只能通过getter方法对成员对象读取 int num = [kp valueTheHigh]; //点语法在=号左边展开为[kp 方法名]; int num2 = kp.valueTheLow; NSLog(@"valueTheAver : %i",num); NSLog(@"valueTheHigh : %i",num2); } return 0; }
/*=================================================
一.@property的定义与使用
1.什么是@property@property是编译器的指令
什么是编译器的指令 ?
编译器指令就是用来告诉编译器要做什么!
@property会让编译器做什么呢?
@property 用在声明文件中告诉编译器声明成员变量的的访问器(getter/setter)方法
这样的好处是:免去我们手工书写getter和setter方法繁琐的代码
二.@property基本使用
在@inteface中,用来自动生成setter和getter的声明用@property int age;就可以代替下面的两行
- (int)age; // getter方法
- (void)setAge:(int)age; // setter方法
三.@property 使用格式
@interface 类名 : 父类名{
(数据类型1)成员变量1;
}
@property (数据类型1)成员变量名1(去掉下), (数据类型2)成员变量2(去掉下);
//在Xcode 4.X版本之后@property自动生成setter与getter的声明与方法(以下默认使用该形式)
//默认情况下,setter和getter方法中的实现,会去访问下划线_开头的成员变量,
//如果没有会自动生成一个_开头的成员变量,自动生成的成员变量是私有变量, 声明在.m中,在其它文件中无法查看,但当可以在本类中查看
@end
四.注意点
1.@property只会生成最简单的getter/setter方法,而不会进行数据判断2.如果需要对数据进行判断需要我们之间重写getter/setter方法
3.若手动实现了setter方法,编译器就只会自动生成getter方法
4.若手动实现了getter方法,编译器就只会自动生成setter方法
5.若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量
五.@property修饰符
修饰是否生成getter方法的readonly 只生成setter方法,不生成getter方法
readwrite 既生成getter 又生成setter方法(默认)
示例:
@property (readonly) int age;
指定所生成的方法的方法名称
getter=你定制的getter方法名称
setter=你定义的setter方法名称(注意setter方法必须要有 : )
@property (getter=isMarried) BOOL married;
说明,通常BOOL类型的属性的getter方法要以is开头
================================================*/
相关文章推荐
- 如何定义一个getter和seter设置的属性可以被绑定
- ECMAScript5中的对象存取器属性:getter和setter介绍
- AS3 类的定义
- 回答下在bugs.php上的一个问题
- 学习笔记---使用prototype.js扩展struts标签实现xmlhttprequest
- Object-c @property的使用方法
- PagedCollectionView
- 黑马程序员--接口污染和组件污染 概念理解
- jsp EL(3)
- Spring 定时器
- Struts2的拦截器
- if else 的代码重构
- struts常见错误
- Flex中元数据标签
- Spring框架快速入门之简介(四)
- Vue.js学习系列(二十九)-- 计算属性(三)
- JavaSE 学习参考:类的封装
- JavaScript权威指南6-属性的特性(1)
- Linux tar 命令
- 关于apache代理报错error reading status line from remote server