属性在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 没有关系, 那么在我们的线程中调用 阅读详情

相关推荐

Ascend C 算子开发遇到的问题及解决方法

在学习Ascend C算子开发进阶课程的时候,进行Ascend C自定义算子工程、算子调用等实验,在开发环境中遇到了一些问题,在这里记录一下。首先如果在启智社区CANN版本为6.3 ,要进行Ascend C算子开发,需要更新CANN版本。

qq_45257495的博客 5108

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

【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真

本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。

weixin_29274969的博客 234

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

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

weixin_30751947的博客 118

告别转换超时!手把手教你用Allegro2Altium.bat搞定AD21导入Allegro 17.2文件

本文详细介绍了如何使用Allegro2Altium.bat工具解决AD21导入Allegro 17.2文件时的转换超时问题。通过理解转换机制、准备离线环境、执行完整转换流程及高级技巧,帮助工程师高效完成PCB设计文件转换,提升工作效率。

weixin_30378623的博客 420

详解YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出/部署

YOLO(You Only Look Once)系列算法因其高效、准确等特点而备受瞩目。由2023年Ultralytics公司发布了YOLO的最新版本YOLOv8是结合前几代YOLO的基础上的一个融合改进版。本文YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出/部署,从网络结构的讲解从模型的网络结构讲解到模型的部署都有详细介绍,同时在本专栏中还包括YOLOv8模型系列的改进包括个人提出的创新点,传统卷积、注意力机制、损失函数的修改教程,能够帮助你的论文获得创新点。

Snu77的博客 8万+

release nil dealloc

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

weixin_30538029的博客 109

手把手教你学SOME/IP「3.2.1.发布/订阅行为」

本文详细介绍了SOME/IP协议中的服务发现机制,重点解析了发布/订阅行为的流程。主要内容包括:1)服务发布与Method通信流程,涵盖find/offer报文交互、TTL保活机制及异常处理;2)服务订阅与Event通信流程,包括subscribe/ack报文交互和组播延迟机制;3)特殊场景如快速发送、半周期回复、重置订阅等机制。通过邮局订阅报纸的类比,帮助理解服务发现的核心原理,并强调流程图对于问题定位的重要性。文章为SOME/IP协议的工程实现提供了实用指导。

nihaoljq2010的博客 1220

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

[Python图像识别] 五十二.水书图像识别 (2)基于机器学习的濒危水书古文字识别研究

上一篇文章详细讲解如何利用数据增强方法实现图像数据集的扩充,并以濒危水书作为案例讲解。这篇文章将详细讲解基于机器学习的水书图像识别方法,以图像像素统计为特征开展图像分类讲解,这是最基础的方法,也为后续深度学习图像分类描述提供支撑。基础性文章,希望对您有所帮助!让我们开始吧,且看且珍惜。

杨秀璋的专栏 989

深入理解 HTTP 协议中的 Content-Type

是 HTTP 协议中的一个头部字段(Header),用于指示请求或响应中实体主体(body)的媒体类型(Media Type),也称为MIME 类型(Multipurpose Internet Mail Extensions)。

h a 6 6 6 c k 为 你解决复杂难题! 997

内存管理,ARC

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

2397

LVGL 拨盘菜单(Dial Menu)

h。

摸鱼专家 191

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

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

weixin_30685047的博客 69

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

weixin_34296641的博客 284

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Can't add self as subview

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

苹果君的工作室 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

[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、付费专栏及课程。

余额充值