objective-c在Xcode中@property相关参数的解释
objective-c在其对象拥有成员变量时,我们为了保持代码的封装,会将成员变量设置为@protected,并为成员变量编写setter和getter方法。
如:
@interface Person : NSObject
{
@protected
int _age;
}
- (int)get;
- (void)setAge:(int)age;
@end @implementation Person
- (int)get
{
return _age;
}
- (void)setAge:(int)age
{
_age = age;
}
@end
在Xcode中,为了让我们摆脱这种枯燥的格式化代码,增加了@property属性设置,使用@property属性,编译器会自动帮我们实现这些代码,
如:
@interface Person : NSObject
@property int age;
@end @implementation Person
@end
这段代码经过编译器编译后与上面的代码完全相同。
但是,在实际应用中,内存管理,多线程,成员变量是否只读等等需求很多,所以@property为我们提供了很多参数来实现这些不同的需求,如下:
1.内存管理相关:
*retain:release旧值,retain新值(适用于对象类型的成员变量)
*assign:直接赋值(默认参数,适用于基本数据类型的成员变量)
*copy: release旧值,copy新值
注:关于内存管理,请阅读http://www.cnblogs.com/yoran-yang/p/4293546.html
以retain为例:
@interface Person : NSObject
@property (retain) Book *book;
@end
等同于:
@interface Person : NSObject
{
@protected
Book *_book;
}
- (Book *)get;
- (void)setBook:(Book *)book;
@end @implementation Person
- (Book *)get
{
return _book;
}
- (void)setBook:(Book *)book
{
if(book != _book)
{
[book release];
_book = [book retain];
}
}
@end
2.读写控制相关
*readwrite:同时生成getter与setter的声明和实现(默认参数)
*readonly:只生成getter方法
3.多线程相关
*nonatomic:禁止多线程,变量保护,提高性能,读写成员变量的操作效率可以提高数倍(强烈建议在非多线程环境的程序加上此参数)
*atomic:线程安全的,性能低(默认参数为线程安全的,即加线程锁)
4.setter和getter方法的名称
*getter =(getter的方法名)
*setter =(setter的方法名)注意:此方法名必须加上后面的“:”。
objective-c在Xcode中@property相关参数的解释的更多相关文章
- 释义Oracle 11r2中并行执行相关参数
因最近对现场某些服务器进行诊断和调整,用到了这类参数,因此对这类参数做了详尽的查阅和研究,现将该类参数释义如下,以方便同行和自己参考,禁止转载: 1.PARALLEL_ADAPTIVE_MULTI_U ...
- property相关参数介绍
1.copy 使用类型 :NSString,block 2.assign使用类型 :delegate,int,float,NSInteger,bool,枚举,结构体... 3.retain使用类型 : ...
- 梯度优化算法总结以及solver及train.prototxt中相关参数解释
参考链接:http://sebastianruder.com/optimizing-gradient-descent/ 如果熟悉英文的话,强烈推荐阅读原文,毕竟翻译过程中因为个人理解有限,可能会有谬误 ...
- Xcode 中armv6 armv7 armv7s arm64 i386 x86_64 归纳 (Architectures, Valid Architectures, Build Active Architecture Only)
http://www.jianshu.com/p/09b445300d40 简介: armv7|armv7s|arm64都是ARM处理器的指令集 i386|x86_64 是Mac处理器的指令集 目前i ...
- spring 配置参数从配置文件中加载到PropertiesFactoryBean 和配置参数从数据库加载到PropertiesFactoryBean 的实现,及项目中的相关应用
1.加载.properties文件中的配置参数加载到PropertiesFactoryBean容器中 <bean id="configProperties" class=&q ...
- 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析)
电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 目录 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 写在前面 正文 电机噪声 谐波的产生 什么 ...
- strong,weak, retain, assign的区别@property的参数
strong,weak, retain, assign的区别@property的参数 先说经验 使用场合 copy:NSString,block, weak:UI控件,代理 strong:一般对象.自 ...
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [转]iOS开发中@property的属性weak nonatomic strong readonly等介绍
转载地址: http://www.lvtao.net/ios/504.html @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后 ...
随机推荐
- 【原】Spark中Client源码分析(一)
在Spark Standalone中我们所谓的Client,它的任务其实是由AppClient和DriverClient共同完成的.AppClient是一个允许app(Client)和Spark集群通 ...
- Html笔记(九)头标签
头标签: <head> 头标签都放在 <head> </head> 头部分之间.包括:title base meta link <title> :指定浏 ...
- 关于Windows Azure的常见问题-注册问题FAQ
注册问题 手机验证出现问题怎么办? 当您输入发送到手机里的验证码到文本框时,您需要点击右侧的“验证代码”的按钮,待按钮转变为“绿色对勾”的标识后,您可以点击“继续”来完成余下的注册步骤.每一个手 机号 ...
- 关于Spring的Controller及Struts的Action的多线程的注意
struts是线程安全,并不是指多线程,而是指单态,当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象,execute方法加上了同步关键字,如果你在action里加上一个全 ...
- WPF的MVVM模式
Model->數據模型View->視圖View-Model->連接數據模型和視圖
- 跟我一起写Makefile:MakeFile介绍
makefile 介绍 make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序. 首先,我们用一个示例来说明makefile的书写规则.以便给大家一个感性认识.这 ...
- 问题-Fastreport4 Memo打印时中文显示不全
问题现象:在使用Fastreport4制作打印工具时,发现Memo显示中文老是显不不全. 问题原因:可能是因为字符编码的原因,希望高人指点. 问题处理:将属性font-charset设置为DEFAUL ...
- Block介绍(一)基础
一.概述 Block是C级别的语法和运行时特性.Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存.堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block ...
- Linux为Tomecat指定JDK
在搭建Jenkin+Sonar集成时,由于系统环境配置了jdk1.7,但是jenkins在安装sonar的插件时,需要jdk1.8.,所以需要在Tomcat指定jdk1.8. (1)暂停Tomcat ...
- 关于.net的一些基础知识(一)
一.GC工作原理: GC如其名,就是垃圾收集,当然这里仅就内存而言.Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root为基础,遍历应用程序在Heap上 ...