iOS开发--@property属性的使用
来源:互联网 发布:淘宝互联 编辑:程序博客网 时间:2024/06/06 18:23
1、strong和weak
strong:强指针/强引用;默认情况下,任何指针都是强指针 ;也就是说,我们平常定义的时候Person *p =[ [Person alloc] init];都是strong;
weak:弱指针/弱引用;使用_weak修饰的指针。
ARC(自动引用计数)的判断准则:只要没有任何强指针指向,这个对象就会被销毁;
当然超过自己的作用范围也会被销毁;
但是程序执行完,仍然有强指针指向(你的strong属性指向我,我的strong属性指向你),就会造成内存泄露
- @autoreleasepool{
- // 一开始就是弱指针指向 ,这一行代码过掉,p对象就会被销毁(调用dealloc方法)
- _weak Person *p = [Person alloc] init];
- }
- @autoreleasepool{
- Person *p = [Person alloc] init];
- Dog *d = [Dog alloc] init];
- p.dog = d;
- d = nil; // 相当于把指向堆内存中的d对象的那根指针去掉
- NSLog(@"%@"p.dog); // 还是能打印出来的,因为p中的dog属性是强指针
- }
- 普通对象做属性使用strong:这样保证了,当前对象p在,p的dog属性指向对象也在
2、UI对象为什么使用weak?
对于UI对象,weak和strong都可以,但是没必要用strong。
在UIViewController中的view属性是个强指针:@property(nonatomic,retain) UIView *view; (iOS5之前retain就是strong)
在view中又有一个subViews数组,数组是个强指针,0的位置存放的强指针指向的是UIButton ;
所以Vc在--view就在--subViews就在--0位置存放的强指针就在,指向的UIButton对象就在,所以没有UI控件没必要定义strong
iOS5之前的assign就是weak
3、delegate为什么用weak?
Vc中view属性是strong,指向view;如果view中delegate是strong,一般指向Vc;两根都是strong就会出问题(内存泄露),所以delegate必须是weak
4、这张图片很好的解释了上述问题:
比如delegate为什么使用weak?
如果delegate使用strong,当程序退出,UIWindow对象销毁之后,UITableViewController对象也要被销毁,
但是由于被delegate是strong并且指向了Vc,所以Vc不会被销毁,造成内存泄露。
5、@property属性的使用
weak(assign):代理\UI控件
strong(retain):普通对象
copy:字符串
assign:基本数据类型
- iOS开发--@property属性的使用
- iOS开发--@property属性的使用
- ios开发中@property的属性介绍
- ios开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- ios开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发中@property的属性介绍
- iOS开发--@property各种属性的区别
- source与.
- ios上架准备
- ENVI5.1无缝镶嵌工具
- GRE写作词汇:数量词
- 1.Lua 环境搭建
- iOS开发--@property属性的使用
- 快速理解VirtualBox的四种网络连接方式
- 二分查找算法和二分查找函数bsearch
- 基础学习-工作
- 【POJ 3259】Wormholes
- 利用R语言对RNA-Seq进行探索分析与差异表达分析
- 第六单元
- Android 事件冒泡及捕获
- 超实用SAT阅读方法