- 浏览: 884449 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (466)
- iPhone, iOS , Objective-c (155)
- 数据库 (20)
- 设计模式 (5)
- 第三方包管理,cocoapod (2)
- 版本管理, SVN, Subversion, Git (1)
- Google, Android, Java (14)
- Wordpress (1)
- 职业素养 (3)
- 版本管理,git (3)
- 前端小技巧 (2)
- flash (1)
- javascript (5)
- Ruby (0)
- 编程语言 (1)
- 网络常识 (1)
- 找到生活好感觉 (5)
- 产品经理 (1)
- markdown (1)
- 云服务器 (1)
- iPhone (116)
- iOS (116)
- Objective-c (116)
- 学习技巧 (2)
- Google (5)
- Android (6)
- Java (21)
- python (1)
- sqlite (3)
- node.js (2)
- mongodb (2)
- 学习技巧,阅读 (2)
- 软件测试 (3)
- 架构设计 (2)
- 设计 (1)
- Spring framework (3)
- junit (1)
- Linux (2)
- 软件 (1)
- Struts2 (1)
- 版本管理 (3)
- SVN (3)
- Subversion (3)
- Git (3)
- mysql (5)
- quartz (1)
- 无关技术 (1)
- 前端 (1)
- Redis (1)
- 产品管理 (0)
- 计算机常识 (1)
- 计算机科学 (0)
- swift (1)
- 服务器 (2)
- 搜索 (1)
- Scala (1)
- J2EE (1)
- maven (1)
- 前端css (1)
- 英语 (1)
- 消息队列 (1)
- kafka (0)
- apache kafka (4)
- netbeans (1)
- IDE (2)
- 歌词 (1)
- 过滤器实现 (1)
- linux vim vi (1)
- jmeter (1)
- springcloud (1)
最新评论
-
hujingnemo:
不知道为什么打不开
CHM如何改编字体大小 -
weiboyuan:
求答案 weiboyuanios@163.com
iOS软件工程师面试题(高级) -
xueji5368:
这个现在已经广泛使用了嘛!
RoboGuice入门 -
Yao__Shun__Yu:
...
CHM如何改编字体大小 -
353144886:
非常之详细 美女求认识
sqlite数据类型 datetime处理
assing是为了防止交叉引用..比如..有3个类....A..B..C.. 我在A里面..创建B...B里面有创建C....并设定C的delegate=self(也就是B).. 如果C里面的delegate是retain...那么B的retain就会是+2(A类创建时+1) 这时候..如果我在A里面release了B...那么B的retain就不会是0(因为C的delegate是retain的)... 也就是说B永远不会被释放掉..就会释放不了..
循环引用
所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:
对象a创建并引用了对象b.对象b创建并引用了对象c.对象c创建并引用了对象b.
这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。
这种情况,必须打断循环引用,通过其他规则来维护引用关系。比如,我们常见的delegate往往是assign方式的属性而不是retain方式的属性,赋值不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用。如果一个UITableViewController 对象a通过retain获取了UITableView对象b的所有权,这个UITableView对象b的delegate又是a, 如果这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。自己在设计使用delegate模式时,也要注意这点。
因为循环引用而产生的内存泄露也是Instrument无法发现的,所以要特别小心。
循环引用
所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:
对象a创建并引用了对象b.对象b创建并引用了对象c.对象c创建并引用了对象b.
这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。
这种情况,必须打断循环引用,通过其他规则来维护引用关系。比如,我们常见的delegate往往是assign方式的属性而不是retain方式的属性,赋值不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用。如果一个UITableViewController 对象a通过retain获取了UITableView对象b的所有权,这个UITableView对象b的delegate又是a, 如果这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。自己在设计使用delegate模式时,也要注意这点。
因为循环引用而产生的内存泄露也是Instrument无法发现的,所以要特别小心。
发表评论
-
oc为啥不用try catch
2016-03-23 11:56 1357简单的来说,Apple虽然同时提供了错误处理(NSError) ... -
ReactiveCocoa笔记
2016-03-14 12:31 0为什么使用MVVM?为什么使用ReactiveCocoa? 概 ... -
PINCache
2016-01-19 15:11 900PINCache是线程安全的键值缓存框架,用来储存难以获取或重 ... -
Swift设计模式
2015-12-29 12:04 0Swift设计模式 -
Understanding Swift access control
2015-12-29 12:03 0Swift takes an unusual approuac ... -
cocoapods因GEM_HOME升级遇到问题解决办法
2015-12-17 14:40 873Installing CocoaPods on OS X 10 ... -
swift 闭包的比较写法
2015-12-16 11:10 705let names = ["Chris", ... -
iOS 生成二维码,生成条形码图片
2015-12-03 15:44 1409#pragma mark - 生成条形码以及二维码 // ... -
解决cocoapods 更新慢的问题
2015-11-23 17:01 702最近使用CocoaPods来添加第三方类库,无论是执行pod ... -
iOS中级面试题
2015-11-20 15:12 1132OneV‘s Den在博客里出了10道iOS面试题,用他的话是 ... -
cocoapods出错解决方法
2015-11-09 13:09 698自定义GEM_HOME $ mkdir -p $HOME/So ... -
oc时间从美国时间改到中国时间
2015-10-19 14:12 915_formatter = [[NSDateFormatt ... -
27个iOS开发库
2015-07-24 16:10 730超长慎入列表: DZNEmptyDataSet(UI,空表格 ... -
Values of type 'NSInteger' should not be used as format arguments; add an explic
2015-07-24 10:10 792Values of type 'NSInteger' shou ... -
iOS架构心得体会
2015-05-18 18:35 762好的架构不是设计出来的,而是进行出来的。 我的iOS工程架构 ... -
UICollectionView NSInternalInconsistencyException出现的原因
2015-05-11 11:32 3356'NSInternalInconsistencyExcepti ... -
XLForm-iOS表单库
2015-05-08 14:44 868XLForm是最灵活和强大的iOS类库,用于创建动态table ... -
Info.plist Utility Error: “Info.plist couldn't be opened because there is no suc
2015-05-06 16:13 642http://stackoverflow.com/questi ... -
iOS中Autolayout中各种情况的使用的width,height策略
2015-04-30 15:33 636可以总结为: 如果项目不支持横屏显示,使用w:Compac ... -
一句话加上下拉刷新
2015-04-29 18:22 728怎么一句话添加上拉刷新? https://github.co ...
相关推荐
6、为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的? 7、定义属性时,什么情况使用copy,assign,和retain 8、autorelease的对象是在什么时候被release的? 9、这段代码有...
IOS面试题归总 Object-C有多继承吗?没有的话用什么代替 Object-C有私有方法吗?私有变量呢 关键字const什么含义 关键字volatile有... 为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain?
例如,使用了新的jQuery内部Ajax API就可以实现下面的代码了: // Assign handlers immediately after making the request, // and remember the jxhr object for this request var jxhr = $.ajax({ url: "example....
IOS 常见的循环引用总结 介绍: 循环引用,指的是多个对象相互引用时,使得引用形成一个环形,导致外部无法真正...Delegate是ios中开发中最常遇到的循环引用,一般在声明delegate的时候都要使用弱引用weak或者assign
使用方法: 复制DOPNavbarMenu文件夹即可使用: 属性方法: @property (copy, nonatomic, readonly) NSArray *items; @property (assign, nonatomic, readonly) NSInteger maximumNumberInRow; @property ...
基础 1.UIPickerView 属性 数据源(用来告诉...@property(nonatomic,assign) id delegate; 是否要显示选中的指示器 代码如下: @property(nonatomic) BOOL showsSelectionIndicator; 一共有多少列 代
代理原理(自己的见解,下面的看不懂的读一读这三句话,再看) 拿到代理自己的类的引用, 并让它实现自己要调用的方法, 通过这个类的引用去调用被它实现的...@property (nonatomic, assign) id delegate; @end @implement
#import #import #import @class RMIAPHelper;...@property(nonatomic,assign) id<RMIAPHelperDelegate> delegate; -(void)setup; -(void)destroy; -(void)buy:(NSString*)productId; -(void)restore; @end
使用步骤: 1.导入视图: #import "DrawingView.h" 2.创建对象: drawingView = [[DrawingView alloc]initWithFrame:CGRectMake(25, 100, [[UIScreen mainScreen] bounds].size.width - 50, [[UIScreen ...
p.delegate = self; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:p]; [self presentViewController:nav animated:YES completion:NULL]; 2.拍完照之后的...
1.UIPickerView的宽度和高度是固定的,纵向是320216,横向是568162 2.属性: 代码如下: @property(nonatomic,...@property(nonatomic,assign)idUIPickerViewDelegate>delegate; (类似于UITableView) (BOOL)showsSel