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以及以后 ...
随机推荐
- 【CSS】Intermediate8:Page Layout
1.Layout with CSS is easy. You just take a chunk of your page and shove it wherever you choose 2.pos ...
- NOIP 2013 花匠
有多种方案,找拐点数目最简单O(n) 注意此题有相邻点价值一样,代码改变一点 #include <cstdio> #include<iostream> #include< ...
- 使用Windows Azure创建Windows系统虚拟机-上
创建虚拟机来运行Windows 本教程介绍了如何轻松创建运行Windows 的 Azure虚拟机(VM),用作来自Azure管理门户中映像图库的Windows 服务器映像.映像图库提供了多种图像,包括 ...
- Amabri安装前的准备工作
Ambari这个东东对操作系统的要求还是很高的,首先限制了要使用CentOS,RHEL,并且还是64bit 的,让我的Ubuntu泪奔啊---手头正好有RHEL6.x的盘,于是就用红帽吧.但是红帽是收 ...
- HW3.2
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- oc学习之路----通过代码自定义cell
需求背景:由于tableView中每一个cell的数据与布局都不一样,故不能用xib实现功能,这是用代码写自定义cell就有必要了. 步骤 1.新建一个继承自UITableViewCell的类 2.重 ...
- iOS开发:创建真机调试证书
关于苹果iOS开发,笔者也是从小白过来的,经历过各种困难和坑,其中就有关于开发证书,生产证书,in_house证书,add_Hoc证书申请过程中的问题,以及上架发布问题.今天就着重说一下关于针对于苹果 ...
- Cactus入门
这是一个WebProject,有关Cactus用法详见本文测试用例 首先是web.xml <?xml version="1.0" encoding="UTF-8&q ...
- [HTTP] HTTP Verb
HEAD: HEAD / HTTP/1.1 nc.exmaple.com HEAD is a interesting method, it allow you to get a header of f ...
- 多线程读写共享变量时,synchronized与volatile的作用
在<effective java>中看的的知识点,在工作中确实遇到了~ keywordsynchronized能够保证在同一时刻,仅仅有一个线程能够运行某一个方法,或者某一个代码块. 同步 ...