strong、weak、copy、assign 在命名属性时候怎么用
一直都在疑惑属性定义中在什么情况下用strong、在什么情况下用weak?
总结大致如下:
1.weak 是用来修饰代理(delegate)和UI控件。
2.strong 是用来修饰除了代理(delegate)、UI控件、字符串(NSString)以外的对象类型。
3.copy 是用来修饰字符串(NSString)。
4.assign 是用来修饰基本数据类型(非对象类型),如:int、float、bool、menu等。
解析为何控件用weak。
如图(1)所示,第一个描述的是一个控制器上边有一个按钮(button)和控制器本身的view。两者同属于UIView的subviews(子控件),而subviews是以数组形式存在的,它内部有两个地址分别存储view和button。而view本身就是以强指针类型(retain)存在的属性,故当view一直存在的时候subviews就会一直被引用,而subviews中的button就不会消亡,所以控件btn属性声明时可用weak,当然也可以用strong只是官方推荐用weak而已。所以遵循官方声明采用weak。防止内存泄漏带来的性能消耗。

图 1
解析为何代理(delegate)用weak。
如图(2)所示,UITableviewController中的tableview属性(强指针类型)它是直接指向UITableview的,而UITableview中的delegate属性的本质就是UITableviewController ,当delegate是强指针类型的时候会出现循环引用的情况,直接导致两个对象不能销毁,从而引起内存泄漏,所以根据两个对象相互引用,必有一个是弱类型的原则。而tableview是系统定义的我们不能进行改动,故而当我们定义引用类型必须是弱类型(weak)。

图 2
* 未完待续。。。
strong、weak、copy、assign 在命名属性时候怎么用的更多相关文章
- iOS知识基础篇--@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain详解
一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonat ...
- 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】
@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...
- 何时使用copy,strong,weak,assign关键字 定义属性
现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained ...
- iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内 ...
- IOS—— strong weak retain assign 学习
转自:http://wenzongliang.iteye.com/blog/1746604 简单讲strong等同retain weak比assign多了一个功能,当对象消失后自动把指针变成nil,好 ...
- [iOS基础控件 - 6.12.3] @property属性 strong weak copy
A.概念 @property 的修饰词 strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign) 默认情况所有指针都是强指针 ...
- copy assign retain 修饰属性的set 方法
@property (nonatomic,retain) NSString * name; - (void)setName:(NSString*)name { [name retain]; 把传进 ...
- iOS之属性修饰符 retain、strong和copy区别测试
时不时会有点迷惑属性修饰符retain.strong.copy三者之间的区别,还是把测试过程记录下来好一点! 1.属性修饰符结论 2.给retain.strong.copy修饰的字符串属性赋值指针变化 ...
- strong & weak
Here is a quick summary: A strong reference will keep the object it points to from being deallocated ...
随机推荐
- hg和git命令对照表
hg和git命令对照表 来源 https://github.com/sympy/sympy/wiki/Git-hg-rosetta-stone Git hg rosetta stone muxat ...
- MT【209】打破对称
设正数$a,b,c$满足$ab+bc+ca=47$,求$(a^2+5)(b^2+5)(c^2+5)$的最小值_____ 解:$(a^2+5)(b^2+5)(c^2+5)=(a^2+5)(5(b+c)^ ...
- Android 安装 卸载 更新 程序
安装程序的方法: .通过Intent机制,调出系统安装应用,重新安装应用的话,会保留原应用的数据. 1. String fileName =Environment.getExternalStorage ...
- install kubernetes cluster k8s集群安装
一,安装docker-ce 17.031,下载rpm包 Wget -P /tmp https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/ ...
- 【bzoj3532】 Sdoi2014—Lis
http://www.lydsy.com/JudgeOnline/problem.php?id=3532 (题目链接) 题意 给出$n$个数的数列,三个值$a[i],b[i],c[i]$.将其中一些数 ...
- 最小割求法&&可行边和必须边
最小割的可行边与必须边 就是在残量网络上跑tarjan 可行边: 满流并且残量网络上不能存在入点到出点的路径 必须边: 满流并且残量网络上入点能从源点到达,出点能到汇点. 任意一种最小割求法: 跑一边 ...
- 黑客专用操作系统——Kali Linux简介
1如果您之前使用过或者了解BackTrack系列Linux的话,那么我只需要简单的说,Kali是BackTrack的升级换代产品,从Kali开始,BackTrack将成为历史. 如果您没接触过Back ...
- ElasticSearch集群介绍二
ElasticSearch集群 一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力. ...
- 【Python】统计个人新浪微博词频并给出相应的柱状图
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- 基于windows server 2012 的微软桌面虚拟化实战教程
http://abool.blog.51cto.com/8355508/1587489/ Windows Server2012 中的“远程桌面服务”服务器角色中就提供了允许用户连接到虚拟机.Remot ...