文档章节

iOS应用开发:ARC之@property使用

jackyyang
 jackyyang
发布于 2012/07/17 23:35
字数 547
阅读 251
收藏 3

iOS应用开发:ARC之@property使用

在《iOS应用开发:什么是ARC?》中,我们学到了一些ARC的基本概念,这一次我们来看看ARC对@property的使用规则有何影响。

AD:

所有者属性

我们先来看看与所有权有关系的属性,关键字间的对应关系。

属性值 关键字 所有权
strong __strong
weak __weak
unsafe_unretained __unsafe_unretained
copy __strong
assign __unsafe_unretained
retain __strong

strong

该属性值对应 __strong 关键字,即该属性所声明的变量将成为对象的持有者。

weak

该属性对应 __weak 关键字,与 __weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被破弃之后,对象将被自动赋值nil。

并且,delegate 和 Outlet 应该用 weak 属性来声明。同时,如上一回介绍的 iOS 5 之前的版本是没有 __weak 关键字的,所以 weak 属性是不能使用的。这种情况我们使用 unsafe_unretained。

unsafe_unretained

等效于__unsafe_unretaind关键字声明的变量;像上面说明的,iOS 5之前的系统用该属性代替 weak 来使用。

copy

与 strong 的区别是声明变量是拷贝对象的持有者。

assign

一般Scalar Varible用该属性声明,比如,int, BOOL。

retain

该属性与 strong 一致;只是可读性更强一些。

读写相关的属性 (readwrite, readonly)

读写相关的属性有 readwrite 和 readonly 两种,如果使用ARC之后,我么需要注意一下 readonly 属性的使用。

比如下面的变量声明。


  
  1. @property (nonatomic, readonly) NSString *name;  

一般声明为 readonly 的变量按理说应该不需要持有所有权了,但是在ARC有效的情况下,将出现下面的错误信息 :

 “ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute
如果定义了ARC有效,那么必须要有所有者属性的定义;所以我们的代码改成这样,就OK了

  
  1. @property (nonatomic, strong, readonly) NSString *name; 

不过有一点,Scalar Varible的变量缺省都有 assign 的属性定义,所以不需要给他们单独的明示声明了。

© 著作权归作者所有

共有 人打赏支持
jackyyang
粉丝 22
博文 42
码字总数 18506
作品 0
珠海
私信 提问
Xcode ARC需要什么版本的环境支持

Mac OS X v10.6 和 v10.7 (64位应用) 的Xcode 4.2以上版本支持ARC,iOS 4 和 iOS 5 下ARC都能工作,但Weak不支持Mac OS X v10.6 和 iOS 4,所以要想在iOS 4下运行用ARC的程序,只能用strong。...

东方皓
2013/05/06
0
0
理解 iOS 和 macOS 的内存管理

在 iOS 和 macOS 应用的开发中,无论是使用 Objective-C 还是使用 swift 都是通过引用计数策略来进行内存管理的,但是在日常开发中80%(这里,我瞎说的,8020 原则嘛)以上的情况,我们不需要...

Mr_zebra
2018/11/20
0
0
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
If love, deep love:10 Most Useful iOS Libs

摘要:库是开发的根本,从页面到APP客户端,所有的设计都离不开它,但面对市面上鱼龙混杂的库,如何选择合适又好用的库?对开发新手来说,这是个问题。本文基于各方观点,选出了10大iOS开发者...

长平狐
2013/01/06
88
0
(转)直接拿来用!最火的iOS开源项目(二)

“每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目...

孙启超
2013/06/21
0
1

没有更多内容

加载失败,请刷新页面

加载更多

dubbo自学入门

由于敏感文字检索过于死板,请跳转我的csdn博客查看 https://blog.csdn.net/loveshunyi/article/details/88813214

GodIsCj
27分钟前
1
0
前嗅ForeSpider脚本教程:模板脚本

链接脚本是频道的模板中的脚本。配置了模板脚本,模板的处理流程将被改变: 1.如果脚本未正确返回dom区域节点,则该模板的采集则完全由该脚本控制。 2.如果脚本返回了一个正确的dom区域节点,...

forespider
31分钟前
0
0
DM 源码阅读系列文章(二)整体架构介绍

作者:张学程 本文为 DM 源码阅读系列文章的第二篇,第一篇文章 简单介绍了 DM 源码阅读的目的和规划,以及 DM 的源码结构以及工具链。从本篇文章开始,我们会正式开始阅读 DM 的源码。 本篇...

TiDB
32分钟前
1
0
stm32h7 __attribute__((weak)) 使用说明

在用stm32h7 板子的时候,看了一个usmart历程,里面有个usart.c函数,声明了一个函数叫做HAL_UART_RxCpltCallback(UART_HandleTYpeDef *huart) 然后再stm32h7xx_hal_uart.c里看到了同样的一个...

青春无极限
33分钟前
1
0
用 C 语言编写 Windows 服务程序的五个步骤(转)

摘要   Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并 实现一个简单的服务程...

_编程菜鸟_
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部