Objective-C 属性
Object-C属性
@property (retain,nonatomic)UILabel titleLabel;
在objective-C中添加属性之前,通常会定义一些方法用于设置和检索类的实例变量的值。这些方法称为访问方法和修改方法(或称为获取方法和设置方法)。
属性的点表示法:
text = [_titleLabeltext];
text = _titleLabel.text;
就编译器而言,这两条语句是完全相同的,点表示法同样适用于修改方法,如下:
[_titleLabelsetText:@"123"];
_titleLabel.text =@"123";
在声明中,@property关键字后面紧跟着一些可选属性(位于圆括号内),它们进一步定义编译器将如何创建访问方法和修改方法。
(1)retain: 通知编译器向分配给此属性的对象发生一个保留(retain)消息。这将确保属性底层的实例变量在使用过程中不会从内存清除。这是必不可少的,默认行为(assign)需要与垃圾收集一起使用。如果定义的一个属性是对象(与int等原始数据类型相反),则通常在可选属性中指定retain。
为int、float或其他原始数据类型声明属性时,不需要指定任何可选属性。
(2)nonatomic: 将更改访问方法和修改方法的生成方式。在默认情况下,这些方法在创建时会具备另外一些代码,用于帮助你编写多线程程序。这些额外的开销虽然较小,但是对于声明指向用户界面对象的指针没有必要,因此我们通过声明nonatomic来节省一些开销。一般规则,大多数情况下,都将指定nonatomic属性。
(3)assign: 用于int、float等原始数据类型,(此属性为默认值)
iOS5新功能ARC(Automatic Reference Counting),新的关键字: strong,weak,unsafe_unretained
(4)strong:于retain类似,引用计数自动+1, (owning)
(5)weak: 用weak修饰,一旦内存被释放,指针将都指向nil,可以防止野指针。(non-owning) 如: Delegate, IBOutlet一般用weak
(6)copy: 建立一个索引计数为1的对象,释放旧的对象。此属性仅用于对象类型,它必须实现NSCopying协议, 如: NSString,Block
(7)unsafe_unretained: 与weak有点类似,但是它是unsafe的,一旦内存释放,容易造成野指针闪退, 尽量少用unsafe_unretained
copy与retain的区别:
1)retain是指针拷贝,copy是内容拷贝; retain的set方法是浅复制,copy的set方法是深复制。
2)建立一个索引计数为1的对象,然后释放旧对象,对NSString。它指出,在赋值时使用传入值的一份拷贝。copy工作由copy方法执行,此属性只对那些实现了NSCopying协议的对象类型有效 。
3)释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1。对其他NSObject和其子类。指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。
以上为常用来声明属性,__strong, __weak, __unsafe_unretained, __autoreleasing,常用来声明临时变量
(8)__block: ARC与MRC模式下都可用,可以修饰对象,也可修饰基本数据类型。
(9)__weak: 只能在ARC模式下使用,只能修饰对象,不能修饰基本数据类型(int等)。
(10)__block: 对象可以在block中改变值。
参考:[iPhone 开发基础教程]
http://www.cnblogs.com/langtianya/p/3691035.html
http://blog.sina.com.cn/s/blog_4ac45c260102w3a5.html
http://www.jianshu.com/p/c1d609d1569b
Objective-C 属性相关推荐
- Objective-C之MRC、ARC模式下,属性修饰关键字strong、retain、assign、weak的区别和联系...
平时用strong.retain.assign.weak这几个关键字的时候,也没有过多的在意,下边就MRC.ARC模式下,每个关键字做一下总结.为了简明期间,采用表格的形式进行展示. MRC ARC ...
- IOS开发中的变量、方法、属性
转自 :http://www.0jl.com/?p=509 1.在Objective语言中可以声明实例变量(Instance Variables). 变量有四种访问范围: 私有(private): 在 ...
- iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象...
1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较 ...
- 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】
@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...
- Objective C ARC 使用及原理
Objective C ARC 使用及原理 手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档 ...
- IOS学习笔记——Objective-c基础(一)
2019独角兽企业重金招聘Python工程师标准>>> 最近自学ios,ios的支持语言是Objective-c,所以要学习ios就需要先学习Objective-c语言.当掌握了Ob ...
- Swift中文教程(十) 属性
属性是描述特定类.结构或者枚举的值.存储属性作为实例的一部分存储常量与变量的值,而计算属性计算他们的值(不只是存储).计算属性存在于类.结构与枚举中.存储属性仅仅只在类与结构中. 属性通常与特定类型实 ...
- Objective C运行时(runtime)技术总结,好强大的runtime
前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...
- 闲鱼是怎么让二手属性抽取准确率达到95%+的?
闲鱼是怎么让二手属性抽取准确率达到95%+的? 先上效果 图1 - 二手属性抽取算法效果Demo(1) 背景 闲鱼作为一款C2X的app,站在商品发布的角度,闲鱼商品相对于淘宝商品的特点有: 轻发布导 ...
- Qt for iOS,Qt 与Objective C混合编程
因为我写了一系列Qt的博文以及一本书<Qt on Android核心编程>,最近有好几个使用Qt的朋友问起 Qt for iOS 的事情,因为我在这方面的经验特别少,写不出系统的文章来,非 ...
最新文章
- es日期format_elasticsearch存储日期格式字段
- Linux 下的动态链接库问题
- 直流(DC)跟交流射频(RF)的电场构成
- (总结)Linux的/etc/services文件简析
- 设计高效sql一般经验谈
- 腾讯大数据高级产品总监洪桃李:决胜未来的4大关键能力
- [Leedcode][JAVA][按摩师][动态规划]
- html css 表头,css固定表格表头(各浏览器通用)
- 三周第二次课(12月26)
- 【nginx】【转】Nginx核心进程模型
- Window2003 IIS+MySQL+PHP+Zend环境配置
- RS485接口的EMC设计方案
- Java学习笔记:2021年12月31日下午-2022年1月1日上午
- Ps(Adobephoto shop)当中布尔运算的使用方法
- win10办公局域网共享文件夹方法
- STM32CubeIDE+FREERTOS踩坑记录
- vue中EventBus的实现原理
- 汇编语言(王爽第三版)实验一
- 细菌大盘点(二) | 葡萄球菌、沙门氏菌、弯曲杆菌
- Androi Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'
热门文章
- Python数据分析及可视化的基本环境
- oracle9i rac for aix,oracle 11gR2 rac for aix 第二个节点运行root.sh不成功问题处理
- 坚持30天打卡赠书新玩法!
- 7代服务器cpu型号,7代intel 全部型号?
- Win10提示“为了对电脑进行保护,已经阻止此应用”怎么处理?
- JavaScript 数据结构与算法(队列)
- Word文字报告自动与Excel数据同步更新
- HTML5游戏开发实战
- 苹果侧边滑动返回_iPhone X侧边按键使用教程,满满都是黑科技啊
- 仿QQ登陆客户端登陆界面