[完] dealloc不调用的原因

本文介绍了三种有效解决内存泄漏的方法:确保计时器被正确释放、避免循环引用强引用导致的问题、及时取消delegate绑定,这些技巧对于提高程序的稳定性和性能至关重要。

① 有计时器没有invalidate掉,这里要注意,先[_timer invalidate];然后再_timer = nil;就OK了;

② 有循环引用强引用造成的;

③ delegate没有取消也会造成影响;

 

在Objective - C中,`alloc` 和 `dealloc` 是用于对象内存管理的重要方法。 ### `alloc` 方法 `alloc` 方法用于创建一个新的对象实例并分配内存。其核心原理与Objective - C的内存管理核心概念“引用计数”紧密相关。当调用 `alloc` 方法时,系统会为对象分配一块足够的内存空间,并且将该对象的引用计数初始化为1。这意味着对象在创建后就有了一次引用,因为它已经被分配到了内存中等待使用。 例如,以下代码展示了如何使用 `alloc` 方法创建一个对象: ```objective-c NSObject *myObject = [[NSObject alloc] init]; ``` 在这个例子中,`[[NSObject alloc] init]` 首先调用 `alloc` 方法为 `NSObject` 类的对象分配内存,然后调用 `init` 方法进行对象的初始化。创建后的 `myObject` 引用计数为1,表示它当前被使用了一次。 ### `dealloc` 方法 `dealloc` 方法则是用于释放对象所占用的内存。当一个对象的引用计数变为0时,系统会自动调用该对象的 `dealloc` 方法。在 `dealloc` 方法中,对象会释放它所拥有的所有资源,如释放它所引用的其他对象、关闭打开的文件描述符等。 以下是一个简单的 `dealloc` 方法示例: ```objective-c @interface MyClass : NSObject @end @implementation MyClass - (void)dealloc { // 释放对象所拥有的资源 [super dealloc]; } @end ``` 在这个例子中,当 `MyClass` 对象的引用计数变为0时,`dealloc` 方法会被调用。`[super dealloc]` 这行代码是为了确保父类的资源也能被正确释放。 ### 原理总结 `alloc` 和 `dealloc` 是基于引用计数机制工作的。`alloc` 负责对象的创建和引用计数的初始化,而 `dealloc` 则在引用计数为0时被调用,负责释放对象的资源和内存。这种机制确保了对象在有引用时一直存在于内存中,而在没有引用时能及时释放内存,避免了内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值