属性在viewDidUnload中设nil,在dealloc中却release

[iOS] ViewController的生命周期及其加载View的步骤 首先先阐明ViewController的职责:对内管理与之关联的View,对外跟其他ViewController通信和协调。对于与之关联的View,ViewController总是在需要的时候才加载视图,并在不需要的时候卸载视图,所以也同时担当了管理应用资源的责任。理解ViewController的LifeCycle(生命周期),能够有效地管理应用资源。 ViewController的初始化 阅读详情
如题,代码如下:
- (void)viewDidUnload {
	self.xxx = nil;
}

- (void)dealloc {
	[xxx release];
}
        属性在viewDidUnload中用点运算符设为nil,在dealloc中却直接调release,都有其理由。
    考虑到现在网上很多误导人的解释,决定记下来。
        总结之前我在stackoverflow和官方文档上查到的东西,viewDidUnload消息被调用表明此时控制器的视图已经被释放。
   (注意此时控制器对象并不会被释放,区别dealloc表明控制器被释放),
    我们必须在此释放更多可以释放的东西,大部分都是视图相关的。
        比如这样(xxx为对象的属性):
            [xxx release];
        但是这样只是释放xxx的引用,xxx变成野指针,所以必须这样:
           [xxx release]; xxx = nil;
       相当于:
           [self setXxx:nil];
        顾及到setXxx消息可能会做一些特殊的操作,比如改变内部的一些状态,
    由于此时对象还存在所以这些状态都是有意义的,所以为了内部的一致性,还是直接调用setXxx消息。
    所以viewDidUnload里面都应该是self.xxx = nil;
        至于dealloc直接调release,此时属性本身会被销毁,所以是不是野指针没有关系。
    切勿在dealloc里面用点运算符,因为此时对象已处于销毁状态,setXxx消息不一定能够正常工作。
    所以在dealloc里面直接release就行。

有错误请指正!


dispatch_get_current_queue 废弃 由于iOS7以后 dispatch_get_current_queue 被废弃,所以需要寻找一个替代的方案。 发现 dispatch_get_current_queue 并没有字面上那么简单。 这个函数一般都会跟 dispatch_async 等API配合, 但是试想一下,我们自己创建的线程(比如 NSThread)跟 dispatch_queue_t 没有关系, 那么在我们的线程中调用 阅读详情

相关推荐

焦距与视差的关系及其对深度估计的影响

焦距在立体视觉中的作用至关重要,它直接影响视差的大小,从而影响深度估计的精度。焦距越长,视差差异越大,物体的深度估计就越精确。这一关系使得焦距长的相机在一些需要高精度深度估计的应用场景中更加优越。了解焦距与视差的关系,对于优化相机配置和提升深度估计精度具有重要意义。在实践中,选择合适的焦距对于获得精确的深度信息至关重要,特别是在自动驾驶、虚拟现实、三维重建等领域,精确的深度估计能够提供更好的用户体验和技术支持。

计算机科学与技术专业学生的成长之路 1670

dealloc中[_x release]、[_x releae],_x=nil和,self.x = nil区别总结

dealloc中[_x release]、[_x releae],_x=nil和,self.x = nil区别 1、[_x release],_x = nil和self.x = nil等价 self.x = nil; OC中属性的设置器 设置器内部实现是这样的 - (void)setX:(id)theX{ if (_x!=theX) { [_...

weixin_30551947的博客 128

【学习总结】飞跨电容三电平boost拓扑发波分析与matlab仿真

正常工作时,飞跨电容的电压大约控制在输出电压的一半,降低了开关器件的耐受电压。

晞子的技术札记 1万+

【转】self.myOutlet=nil、viewDidUnload、dealloc的本质剖析

对于iphone开发人员来说,内存管理是极为重要的技巧,哪怕程序的功能再强大,设计再漂亮,如果内存控制不好,也难逃程序莫名退出的噩运,这与网页开发是完全不同的。内存控制里面有很多门道,在这里分析一下 viewDidUnload 和 dealloc 的区别,关于这两者的区别的文章很多,但是大都是摘抄和翻译官方文档,有的也只是简单的说两句,并没有详细说出两者具体的区别。在了解两者之间的区别,首先要知道...

weixin_30751947的博客 118

prplOS amx-fxgi调试-订阅subscribe

本文分析了prplOS中amx-fxgi订阅功能(subscribe)的实现与调试过程。通过梳理订阅流程发现,默认订阅失败主要由于acl规则限制导致。文章详细介绍了订阅的两个关键步骤:建立GET长连接和POST设置订阅路径,并通过修改代码绕过acl验证成功实现订阅功能。最终验证了在同一连接下订阅多个路径及实时接收状态更新的可行性,有效降低了设备查询负载。该方案为prplOS的实时数据监控提供了优化思路。

四儿家的小祖宗的博客 329

AutoSAR系列讲解(深入篇)14.7-Mcal Adc配置(上)

详细讲解了ADC的各个配置项的作用

雪云飞星的博客 1万+

release nil dealloc

属性在viewDidUnload中设nil,在dealloc中却release -(void)viewDidUnload{ self.xxx=nil; } -(void)dealloc{ [xxxrelease]; } 属性在viewDidUnload中用点运算符设为nil,在d...

weixin_30538029的博客 109

EMC中的RE测试与整改

测试主要测试电子、电气设备或系统在正常工作时自身对外界的辐射干扰强度,包括来自电路板、机箱、电缆及连接线等所有部件的辐射骚扰。分为:磁场辐射和。其中后者较为应用普遍。测试频段根据不同标准要求不一致。手机测试的频段主要为30-1000MHZ。需要注意的是设备在进行RE测试时要求尽可能满配置,满负荷的运行。同时RE也是EMC中的难点。

学海无涯的专栏 1670

Set to nil in viewDidUnload, but release in dealloc

code sample should look like the following: - (void)viewDidUnload {     self.label = nil;     [super viewDidUnload];}- (void)dealloc {     [label release];     [super dealloc];} When a low-mem

xak的专栏 777

【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板

NPU(Neural Processing Unit) 是专门用于人工神经网络推理与训练的处理器,具备高并行、低功耗、低延迟等特点。它是边缘 AI、自动驾驶、智能摄像头、语音识别等场景中的关键硬件。

moton2017的博客 2248

在 SAP S/4HANA Private Cloud 中把标准 CDS View 发布为 OData:可操作的四条路径与完整示例

在 ADT 中创建。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 722

内存管理,ARC

http://www.yifeiyang.net/development-of-the-iphone-simply-3/ 1.  实例变量的循环引用有两种:      强引用,retain      弱引用,assign,要保证对象在引用期内,不能被其它的引用释放.   2.  Core Foundation's memory allocation policy is that

2397

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

基于FPGA的时间数字转换(TDC)设计,此为第五篇:基于Carry4的高精度TDC设计。提供工程文件及MATLAB测试分析代码

sdau2005的博客 8800

[转]一个小试验验证对象的指针计数置为nil的情况

本文转载于新风作浪的博客专栏,博客地址:http://blog.youkuaiyun.com/duxinfeng2010/article/details/8757211 以下博客原文: 最近遇到这样一个问题,以前的时候并未注意;新建一个工程,然后添加一个类,文件结构是这样的 然后写了这样一小段程序,运行 - (void)viewDidLoad { [super viewDid...

weixin_30685047的博客 69

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

iOS面试核心考点深度剖析:内存管理、多线程与Runtime

iOS开发中,内存管理和多线程是保证应用流畅运行的两大基石。引用计数与ARC机制决定了对象的生命周期,而GCD队列与RunLoop事件循环则构成了底层执行骨架。理解这些原理,不仅能从根本上解决循环引用、主线程死锁、界面卡顿等高频问题,还能为探索Runtime的消息转发与方法交换打下基础。Runtime赋予了Objective-C强大的动态特性,是AOP、KVO等高级技术的实现核心。从网络层的HTTPS握手与缓存策略,到UI布局的Safe Area适配,所有工程实践都离不开对这些底层机制的透彻理解。围绕一份经

weixin_34296641的博客 284

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Can't add self as subview

iOS7刚发布的时候,总是出现这个 Can't add self as subview  的崩溃,团队内部没出现过,但是外部用户的crash频频上报这个崩溃。

苹果君的工作室 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[iOS] 关于 self = [super init];

先看一下官方文档给出的初始化示例代码: - (id)init { self = [super init]; // Call a designated initializer here. if (self != nil) { // 省略其他细节 } return self; } 容易让人困惑的地方在于,将父类初始化之后,将其返回的对象

苹果君的工作室 1万+

viewDidUnload 和 viewWillUnload 被废弃之后的内存警告处理

由于iOS6以上的UIKit不会在内存警告时自动释放视图,所以viewWillUnload和viewDidUnload将不再触发。 因此,在iOS6上,开发者需要负责内存警告时将不用到的视图释放。 WWDC2012的视频有提到,具体代码如下: - (void)didReceiveMemoryWarning { if ([self.view window] == nil) {

苹果君的工作室 5161

使用 symbolicatecrash 解析崩溃堆栈

确认Xcode的环境 /usr/bin/xcode-select -print-path结果应该是: /Applications/Xcode.app/Contents/Developer/如果结果不是上述的路径,则指定一下路径: sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer/准备好解

苹果君的工作室 4647

[iOS] Objective-C的单件模式

首先,苹果官方文档给出了单件模式的例子,代码见本文最后。 其方式是重写release,retain,retainCount,autoRelease,allocWithZone和copyWithZone等方法。 1 重写allocWithZone和copyWithZone的目的是外部在多次调用alloc的时候,内部能够确保对象只创建了一次。 2 重写release、retain、a

苹果君的工作室 4507

《View Controller Programming Guide for iOS》笔记

1 ViewController分两种:Content View Controller 和 Container View Controller。 2 View Controller的职责:对内管理Views,对外跟其他ViewController通信和协调,Storyboards可以降低对外部分的复杂度。 3 ViewControllers are brains of you

苹果君的工作室 4457

不使用 symbolicatecrash 解析崩溃堆栈

如果 使用 symbolicatecrash 解析崩溃堆栈 不起作用,可以通过以下方式看看符号文件和堆栈是否是对应的:         dwarfdump --uuid xxx.app         dwarfdump --uuid xxx.app.dSYM         grep "0x.*com.wihing.xxx .*     如果输出一样的uuid,那么就是对应的,此

苹果君的工作室 3456

UIView的alpha属性和hidden属性

alpha 属性为0.0时视图完全透明,为1.0时视图完全不透明。 hidden属性为YES时视图隐藏,否则不隐藏。 注意事项: 1 当视图完全透明或者隐藏时,不能响应触摸消息。 也就是alpha等于0.0或者hidden为YES的时候,但是当alpha 2 视图的alpha值会影响子视图的绘制,但是子视图的alpha值不变。 文档的原文:This value affects only

苹果君的工作室 3398

《View Programming Guide for iOS》笔记

View and Window Architecture 1 每个View的背后都有一个Layer负责渲染。Layer的渲染一般由Core Animation完成,并最终由更底层的硬件缓冲区保存屏幕上的每个点。 2 从视觉上看,子视图会遮住父视图的一部分或者全部。就是说,子视图的zorder一定比父视图大。 3 父视图的某些改变会影响到子视图,比如 resize,hide,alpha,t

苹果君的工作室 2955
上一篇: 《View Programming Guide for iOS》笔记
下一篇: WWDC 2012 Session 221 iOS User Interface Design (iOS 用户界面设计)
wihing
博客等级 码龄19年 55粉丝 36原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值