OC - @property与setter,getter方法
来源:互联网 发布:股票书籍 知乎 编辑:程序博客网 时间:2024/05/22 04:37
先说说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;}@endint 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@endint 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开头
================================================*/
- OC - @property与setter,getter方法
- oc - getter,与 setter
- @property简化setter、getter方法
- OC中setter方法与getter方法的内部实现
- 二、oc中的setter与getter方法以及点语法
- setter方法 、getter方法、点语法、@property
- property 定义 getter 跟 setter 方法
- property属性的setter、getter方法
- 生成getter与setter方法
- iOS setter与getter方法
- iOS setter 与 getter方法
- 黑马程序员-OC-getter & Setter方法
- 10、OC setter和getter (@property、@synthesize)
- setter,getter,@property,@synthesize
- // OC 中的 getter setter
- OC中的setter getter
- 黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法
- 黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法
- OCiOS开发:表格视图实现腾讯好友列表展开收缩效果
- leetcode笔记:Range Sum Query - Immutable
- Android_程序退出_关闭所有activity代码
- JSONModel简介(一)——读取并转化简单的本地JSON文件
- 响应函数(响应机制)——高版本与低版本之间的差异!!
- OC - @property与setter,getter方法
- TranslateAnimation详解
- jquyer 表单 屏蔽回车,自动跳转到下个文本框!
- 微信公共号开发简单入门
- asp.net Session丢失的解决办法小结
- 模拟jdk 动态编译
- 面试笔试 ----- 广州易幻Android(未通过)
- jQuery通过函数参数来定位HTML标签的id属性的方法
- hdu1576- A/B