setter,getter,@property,@synthesize
2016-04-29 13:28
232 查看
以前都是直接用,我会用到@synthesize,@property,setter ,getter方法,基本自给都会用到,不过说真的,自己用的时候真的是朦朦胧胧,反正都是用,这点简单的基础知识,自己无需那么深究,今天有空了,我得好好深究一下,看了文档,也看了看别人写的技术博客,自己在这也是稍微总结下,是这样的,setter方法,顾名思义,就是设置方法,那么设置方法是干嘛的呢?其实就是我改变它,我可以设置它嘛,根据我自己的需要,想怎么设置就怎么设置它。而getter呢,获得!对,就是获得,我可以设置一个变量,然后获得它,然后拿到这个获得到的值我再做自己想做的事。
@property (readonly) //表示只创建get方法,不创建set方法,
atomic //原子操作,有这个参数时,在这个线程运行结束之前,不允许其他线程使用我已使用的资源,正常情况下,线程是可以使用同一个资源,并且多个线程间可以交替的运行
noautomic //非原子操作,不必原子操作,默认是原子操作的,因此有时会增加这个参数,
@property (getter = OtherName) NSInteger name;//修改默认的getter名字,name为OtherName.使用的时候我们可以同时使用这两个名字都可以。
@property (setter=settttStr:)NSString *myStr;//setter方法名字就是括号中的那个,
在之前,我们用这个变量,或者需要对这个变量操作的时候我们是需要写setter和getter方法的,写一个变量,就得至少写两个方法,先得声明,再实现,真的是太繁琐了,所以后来有了@property和@synthesize,这两个单词真的是解决了我们很大的问题,一般来说,一个@property就解决了所有的问题,有些开发者还是习惯在实现文件中加上@synthesize,习惯好,无可厚非,本人看来就是一个@property爸所有事情解决了也未尝不是好事,
在.h中我们移除了getter方法和setter方法。代之以"@property"开头的语句。
在.m中,我们删除了所有的setter/getter方法,代之以两个"@synthesize"开头的语句。(可以忽略)
这和前面的代码是一模一样的。 回想一下,写一个getter也是很简单的:你只需要知道将返回哪个变量以及变量的类型就行了,这样就很容易写出代码了。对于setter,你需要知道的是:正在对哪个变量赋值,以及它的类型,以及是否是简单赋值(例如int类型的属性)或者是否需要进行retain/release(例如NSString属性)。
然而,现在我们只需要一个(两个也可以)"@"语句就行了:
@property(nonatomic, retain)NSString *text;
翻译过来就是“我有一个NSString类型的成员变量 'text'。我需要一对getter/setter方法(使用retain/release)”。
@property(nonatomic, assign) intvalue;
翻译过来就是“我有一个int型成员变量 'value'。我需要一对使用简单赋值而不是retain/release的getter/setter方法”。
@synthesize text;
翻译过来就是“请为 'text'自动生成getter/setter方法代码”。
@synthesize value;
翻译过来就是“请为 'value'自动生成getter/setter方法代码”。
注意,我们仍然需要在dealloc方法中release对象。O-C显然还无法自动帮我们做这些事情。(iOS6之后不需要我们来管理内存了,使用ARC,系统会自动帮我们解决这个内存问题).
@property (readonly) //表示只创建get方法,不创建set方法,
atomic //原子操作,有这个参数时,在这个线程运行结束之前,不允许其他线程使用我已使用的资源,正常情况下,线程是可以使用同一个资源,并且多个线程间可以交替的运行
noautomic //非原子操作,不必原子操作,默认是原子操作的,因此有时会增加这个参数,
@property (getter = OtherName) NSInteger name;//修改默认的getter名字,name为OtherName.使用的时候我们可以同时使用这两个名字都可以。
@property (setter=settttStr:)NSString *myStr;//setter方法名字就是括号中的那个,
在之前,我们用这个变量,或者需要对这个变量操作的时候我们是需要写setter和getter方法的,写一个变量,就得至少写两个方法,先得声明,再实现,真的是太繁琐了,所以后来有了@property和@synthesize,这两个单词真的是解决了我们很大的问题,一般来说,一个@property就解决了所有的问题,有些开发者还是习惯在实现文件中加上@synthesize,习惯好,无可厚非,本人看来就是一个@property爸所有事情解决了也未尝不是好事,
在.h中我们移除了getter方法和setter方法。代之以"@property"开头的语句。
在.m中,我们删除了所有的setter/getter方法,代之以两个"@synthesize"开头的语句。(可以忽略)
这和前面的代码是一模一样的。 回想一下,写一个getter也是很简单的:你只需要知道将返回哪个变量以及变量的类型就行了,这样就很容易写出代码了。对于setter,你需要知道的是:正在对哪个变量赋值,以及它的类型,以及是否是简单赋值(例如int类型的属性)或者是否需要进行retain/release(例如NSString属性)。
然而,现在我们只需要一个(两个也可以)"@"语句就行了:
@property(nonatomic, retain)NSString *text;
翻译过来就是“我有一个NSString类型的成员变量 'text'。我需要一对getter/setter方法(使用retain/release)”。
@property(nonatomic, assign) intvalue;
翻译过来就是“我有一个int型成员变量 'value'。我需要一对使用简单赋值而不是retain/release的getter/setter方法”。
@synthesize text;
翻译过来就是“请为 'text'自动生成getter/setter方法代码”。
@synthesize value;
翻译过来就是“请为 'value'自动生成getter/setter方法代码”。
注意,我们仍然需要在dealloc方法中release对象。O-C显然还无法自动帮我们做这些事情。(iOS6之后不需要我们来管理内存了,使用ARC,系统会自动帮我们解决这个内存问题).
相关文章推荐
- Linux内核学习总结篇
- hbase1.2.1 编译hadoop-2.7.2
- linux 下Time_wait过多问题解决
- Hadoop2.6.0子项目hadoop-mapreduce-examples的简单介绍
- linux 信号详解
- Linux常用命令大全
- Windows Apache(ApacheHaus)安装配置教程
- OpenCV系列(三):Mat详解
- Linux系统的负载与CPU、内存、硬盘、用户数监控的shell脚本
- 连接池中Tomcat的几个参数
- Idea2016使用Tomcat7.0部署web项目异常
- SDN入门资料 | Openflow入门 | SDN初级学习
- ecshop小京东短信接口插件修改-v41,42,43,50+图片说明
- linux读取配置文件(C语言版)
- 理解RESTful架构
- 文章用手,产品用心
- Understanding memory usage on Linux
- PowerShell Remove all user defined variable in PowerShell
- OpenCV程序:显示图片,检测边缘
- CentOS权限详解