Objective-C的那些事——设置器(setter)和访问器(getter)
来源:互联网 发布:职称英语网络课程 编辑:程序博客网 时间:2024/06/14 09:55
最近进入了Objective-C的学习阶段,由于刚开始接触的是类和对象,教我们学习的范哥怕我们不会创建类和对象,一次性给我们布置了创建40个类的作业,再加上其他事情,博客已经好几天没更新了。在这里说明一下,之前我一直更新的是有关C语言的题目,现在将开始更新有关Objective-C的一些知识点以及平时做的题目。当然了,C语言系列还会继续更新,由于需要在Objective-C花费较多的时间,所以C语言系列更新频率不会太高。
言归正传,今天和大家分享一些有关设置器(setter)和访问器(getter)的知识。
对于一个类,我们怎么才能在main.函数里面访问到他的实例变量以及对实例变量重新赋值呢?
大家知道,关于类的实例变量有三种可见度,分别是:
(1)@public(公共的),在任何文件中都可以访问。
(2)@protected(受保护的),有一定的访问权,只允许在本类文件以及子类文件中访问,其他文件按不可以访问
(3)@private(私有的)只允许在本类文件中访问,不可以在子类文件中以及其他文件中访问
如果我们在定义实例变量时没做可见度声明的话默认的是@protected。这种可见度在main函数里是无法对实例变量访问和修改的。
有些人会说,那我们把实例变量的可见度设置为@public的不就行了么。
这样做是可以的,就是在定义实例变量时自己把可见度设置为@public,这样我们就可以在main函数里想怎么访问和修改实例变量都可以。
但是,没人会这么做的。为什么呢?
(1)把实例变量声明为@public的话,外部就可以随意访问和修改,这样会影响内部的实现
(2)面向对象的三大特性之一是封装,封装的思想就是隐藏内部实现,只提供外部接口,设置成@public的话就违背了这一思想。
那我们还怎么做才可以访问和修改实例变量呢?
今天的主角设置器(setter)和访问器(getter)就要隆重登场了。
虽然我们在类的外部文件中不能直接访问和修改,那么我们就间接的通过设置器(setter)和访问器(getter)访问和修改。关于设置器(setter)和访问器(getter)的思想个人是这样理解的,类的内部成员可以对类的进行访问和修改,我们只需要把想要修改的和想要访问的传递过去,由类内部来实现,然后再反馈给我们。
下面通过代码来体会一下设置器(setter)和访问器(getter)的用法。
我们首先定义一个类和声明一些方法,具体代码如下:
#import <Foundation/Foundation.h>@interface Person : NSObject{ NSString *_name; // 姓名 NSString *_gender; // 性别 NSInteger _age; // 年龄} // 设置器 setter方法// 为 name 赋值- (void)setName:(NSString *)name;// 为 gender 赋值- (void)setGender:(NSString *)gender;// 为 age 赋值- (void)setAge:(NSInteger)age; // 访问器 getter方法// 读取 _name 的值- (NSString *)name;// 读取 _gender 的值- (NSString *)gender;// 读取 _age 的值- (NSInteger)age;@end
接下来我们再看一下类的实现部分:
#import "Person.h"@implementation Person// 为 name 赋值- (void)setName:(NSString *)name{ _name = name;}// 为 gender 赋值- (void)setGender:(NSString *)gender{ _gender = gender;}// 为 age 赋值- (void)setAge:(NSInteger)age{ _age = age;}// 读取 _name 的值- (NSString *)name{ return _name;}// 读取 _gender 的值- (NSString *)gender{ return _gender;}// 读取 _age 的值- (NSInteger)age{ return _age;}最后我们来看怎么在主函数里使用:
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ @autoreleasepool { Person *person = [[Person alloc] init]; [person setName:@"Duke"]; [person setGender:@"Man"]; [person setAge:18]; NSLog(@"name:%@, gender:%@, age:%ld", [person name], [person gender], [person age]); } return 0;}
运行结果截图如下:
这样我们就达到了通过设置器(setter)和访问器(getter)修改和访问实例变量的目的了
有关设置器(setter)和访问器(getter)的简单介绍就到这里,如果文章中有错误的地方还请多多批评指正
- Objective-C的那些事——设置器(setter)和访问器(getter)
- 设置器(setter)和访问器(getter)的使用方法
- Objective-C的setter和getter
- Objective-C的setter和getter
- Objective-C的setter和getter
- Objective-C的setter和getter
- Objective-C的setter和getter
- Objective-C的setter和getter
- Objective-C的setter和getter
- Objective-C的基础setter和getter
- Objective-C----setter 和 getter
- 私有成员的设置和访问方式——setter和getter
- JS访问器(getter和setter)
- Objective-C 方法,setter和getter,完整初始化及便利构造器
- JS 对象的访问器属性setter getter函数
- 属性访问器(Property Accessor)----Setter/Getter
- iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法
- Objective-C类的setter方法getter方法如何写
- Cocos2d-x 3.0 beta 中加入附加项目,解决无法打开包括文件:“extensions/ExtensionMacros.h”
- 服务器IIS如何绑定域名(图解)
- C# 将自己编写的控件放到 Visual Studio 工具箱中
- PL2303 Windows8.1驱动的问题
- 查看淘宝顶端的通知样式
- Objective-C的那些事——设置器(setter)和访问器(getter)
- .net 获取当前时间,以及各种格式的时间
- 在Mega官网发现的非常有趣的统计
- 【Linux入门学习之】Linux关机命令总结
- 魔方机器人之上位机编程-------- 最无厘头错误(空格)
- 2014找工作总结-机会往往留给有准备的人
- 关于URL地址
- 【Linux入门学习之】vi/vim编辑器必知必会
- select,poll,epoll区别