首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

dealloc,使用release或设置为nil属性?

dealloc是Objective-C中的一个方法,用于释放对象的内存。在ARC(自动引用计数)环境下,dealloc方法已经不再需要手动调用,系统会自动管理对象的内存释放。因此,在现代的Objective-C开发中,我们不需要手动编写dealloc方法。

在非ARC环境下,我们需要手动管理对象的内存释放。在dealloc方法中,我们可以释放对象持有的其他对象、取消注册的通知、停止定时器等操作,以确保对象在释放时不会造成内存泄漏或其他问题。

使用release或设置为nil属性是在非ARC环境下手动释放对象的常用方式。release方法会将对象的引用计数减1,当引用计数为0时,对象会被销毁。将属性设置为nil可以确保在释放对象后,不会再访问到已经释放的对象,避免野指针的问题。

需要注意的是,在ARC环境下,使用release或设置为nil属性是无效的,因为ARC会自动管理对象的内存释放。在ARC环境下,我们只需要关注对象的强弱引用关系,确保对象不再被强引用时,系统会自动释放对象的内存。

总结:

  • dealloc是Objective-C中的方法,用于手动释放对象的内存,在ARC环境下不再需要手动调用。
  • 在非ARC环境下,可以使用release方法将对象的引用计数减1,当引用计数为0时,对象会被销毁。
  • 将属性设置为nil可以确保在释放对象后,不会再访问到已经释放的对象,避免野指针的问题。
  • 在ARC环境下,不需要手动释放对象的内存,只需关注对象的强弱引用关系。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS - 老生常谈内存管理(二):从 MRC 说起

(在Objective-C中允许给nil发送消息,且这样会直接返回不做任何事情。所以就算是第一次调用,_count 变量nil,对其进行 release也没事。...= newCount) { [_count release]; _count = [newCount retain]; } } 使用访问器方法设置属性值 假设我们要重置以上...不要在初始化方法和 dealloc使用访问器方法 你不应该在初始化方法和dealloc使用访问器方法来设置实例变量,而是应该直接操作实例变量。...备注: 先解释一下nilrelease的作用:nil是将一个对象的指针置空,只是切断了指针和内存中对象的联系,并没有释放对象内存;而release才是真正释放对象内存的操作。...此外,属性可能正处于 “键值观测”(Key-Value Observation,KVO)机制的监控之下,该属性的观察者(observer)可能会在属性值改变时 “保留” 使用这个即将回收的对象。

1.5K21

objective-C 的内存管理之-引用计数

方法使retainCount-1,调用release方法时,如果retainCount值减到0,系统将自动调用对象的dealloc方法(类似于c#中的dispose方法),开发人员可以在dealloc中释放清理资源...sample.retainCount=%d",[_sample retainCount]);//1,注:即便是在析构函数执行后,如果立即再次引用对象的retainCount,仍然返回1,但以后不管再试图引用该对象的任何属性方法...(其实就是一个指针),而不实例化,其初始值nil 1.2 变量实例化以后,就算release掉,dealloc被成功调用,其retainCount并不马上回到0(还能立即调用一次且仅一次[xxx retainCount...]),而且指针变量本身也不会自动归nil值 1.3 dealloc被调用后,必须手动赋值nil,retainCount才会自动归0 以上结论是实际试验得出来的,见下面的代码: Sample *s ;...举这个例子无非就是得出这样一个原则:对于new出来的对象,使用retain造成的影响一定要运用相应的release抵消掉,反之亦然,否则,要么对象不会被销毁,要么过早销毁导致后面的非法引用而出错。

833100
  • iOS应用开发:什么是ARC

    [array release]; //array代表alloc但没有autorelease的变量     [super dealloc]; #endif }     总结:   1,arc的设置是在build...ARC基本规则 retain, release, autorelease, dealloc由编译器自动插入,不能在代码中调用     dealloc虽然可以被重载,但是不能调用[super dealloc...总结 今天,我们看到了基本的ARC使用规则     代码中不能使用retain, release, retain, autorelease     不重载dealloc(如果是释放对象内存以外的处理...        8.不能使用内存存储区(不能再使用NSZone)         9.不能以new开头给一个属性命名         10.声明outlet时一般应当使用weak,...weak 该属性对应 __weak 关键字,与 __weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被破弃之后,对象将被自动赋值nil

    1.1K60

    《Objective-C-高级编程》干货三部曲(一):引用计数篇

    答案是不会:调用对象的release方法只是将对象的引用计数器-1,当对象的引用计数器0的时候会调用了对象的dealloc 方法才能进行释放对象的内存。...将指向某对象的指针变量设置nil。 当程序释放对象的某个拥有者时。 从collection类中删除对象时。...调用release后,引用计数-1。 引用计数0时,调用dealloc方法废弃对象。...ARC下的规则 我们知道了在ARC机制下编译器会帮助我们管理内存,但是在编译期,我们还是要遵守一些规则,作者我们列出了以下的规则: 不能使用retain/release/retainCount/autorelease...我们知道weak指向的对象被销毁时,指针会自动设置nil。而_unsafeunretained却不会,而是成为空指针。需要注意的是:当处理非对象属性的时候就不会出现空指针的问题。

    1.7K40

    iOS - 老生常谈内存管理(三):ARC 面世

    dealloc时,需要遍历对象的weak表,把表里的所有weak指针变量值置nil,指向对象的weak指针越多,性能消耗就越多。...就比如__weak修饰符,如果没有Runtime,那么在对象dealloc时就不会将__weak变量置nil。...若要保持与MRC下一致,必须将实例变量使用__weak修饰,使用weak关键字的属性。...在free数组之前,必须将每个元素赋值nil(memsetbzero将不起作用)。 你应该避免使用memcpyrealloc。 Q: ARC 速度上慢吗? 不。...当你迁移项目到ARC创建一个ARC项目时,所以Objective-C源文件的默认编译器标志将设置-fobjc-arc,你可以使用-fno-objc-arc编译器标志指定的类禁用ARC。

    2.1K10

    property属性相关小记

    默认情况下为nullable状态,可以赋值nil atomic:与nonatomic相对应,用于决定编译器生成的getter和setter是否原子操作,atomic设置成员变量@property属性时...为何block声明都设置copy属性 在声明为copy后,block才会在堆中,栈中的block生命周期是和栈绑定的。...weak属性需要在dealloc中置nil么?(runtime如何实现weak变量自动置nil) 不需要。在释放时,调用clearDeallocating函数。...原理:weak对象会放入一个hash表中,用weak指向的对象内存地址作为key,因此该对象引用计数0时就回dealloc,在hash表中找到所有以该对象内存地址key的weak对象,从而置nil...(1)、调⽤用objc_release (2)、因为对象的引⽤用计数0,所以执行dealloc (3)、在dealloc中,调⽤用了了_objc_rootDealloc函数 (4)、在_objc_rootDealloc

    1.1K20

    精选面试题教你应对高级iOS开发面试官(提供底层进阶规划蓝图)

    ;他们之间可能进行赋值操作,确保对象中的字符串值不会无意间变动,应该在设置属性值时拷贝一份。...dealloc中置nil么?...不需要,在ARC环境无论是强指针还是弱指针都无需在 dealloc设置 nil,ARC 会自动帮我们处理,即便是编译器不帮我们做这些,weak也不需要在dealloc中置nil,runtime内部已经帮我们实现了...C++的实例变量们(ivars)调用destructors ARC 状态下的实例变量们(ivars)调用-release*解除所有使用runtime Associate方法关联的对象 解除所有_weak...=nil); } 使用伪代码来展示下: int main( int argc, char * argv[]) { //程序一直运行状态 while (AppIsRunning) { //睡眠状态,等待唤醒事件

    53200

    《Objective C编程》笔记

    如: synthesize w; 6.方法前的-号表明此方法实例方法,必须通过new才能使用; 方法前的+号表明此方法类方法,是静态方法,无需new也能使用。...c.如果你不拥有某个对象,但是要使用该对象的时候,可以向其发送release消息或者autorelease消息(release会使retain计数立刻减1。...如果某个新对象的对象是另一个对象的委托对象数据源对象,那么该对象应该在其dealloc方法中取消相应的关联: (void)dealloc { [windowThatBossesMeAround setDelegate...如果某个新创建的对象是另一个对象的目标,那么该对象应该在其dealloc方法中将相应的目标指针赋0: (void)dealloc { [buttonThatKeepSendingMessages...如果该对象被释放,那么相应的实例变量就会被自动赋nil(如果在声明指针变量时,使用的是unsafe_unretain特性,那么当其指向的对象被释放后,该指针变为悬空指针。

    60130

    iOS - 老生常谈内存管理(四):内存管理方法源码分析

    只有你直接调用了dealloc,或者调用了release且在release方法中判断对象的引用计数 0 的时候,才会调用dealloc。详情请参阅release源码分析。...release 当我们在不需要使用(持有)对象的时候,需要调用一下release方法进行释放。release方法会将对象的引用计数 -1。...根据dealloc过程,__weak修饰符的变量在对象被dealloc时,会将该__weak置nil。...weak 清除 weak 以上从dealloc方法实现我们知道了在对象dealloc的时候,会调用weak_clear_no_lock函数将指向该对象的弱引用指针置nil,那么该函数的具体实现是怎样的呢...,newObj 对象地址 { // 如果对象 nil,那就将 weak 指针置 nil if (!

    2.2K30

    Objective-C 内存管理之 _ARC

    也就是说,_weak不会影响对象的销毁,仅仅要__weak 修饰的对象没有强引用时,就会自己主动销毁,这时候_ weak 变量会自己主动设置nil....可是你须要在对象属性使用weak 和strong, 当中strong就相当于retain属性,而weak相当于assign。基础类型还是使用assign。...ARC 的一些强制规定 不能直接调用 dealloc 方法,不能调用 retain,release,autorelease,retainCount 方法,包含@ selector(retain) 的方法也不行...假设你须要管理资源而不是释放实例变量,你应该事先 dealloc 方法.不能再 dealloc 方法里面去调[ super dealloc] 方法,在 ARC下父类的 dealloc 相同由编译器来自己主动完毕...不能使用内存储存区(不能再使用 NSZone) 不能以 new 开头给一个属性命名.

    56410

    iOS开发之多媒体API (转载)

    iOS播放视频  iOS sdk播放视频提供了非常简便方法,提供的MPMoviePlayerViewController类作为开发使用,在iOS4以前的版本是MPMoviePlayerController... release];       [super dealloc];   }   MPMoviePlayerViewController提供了在播放过程中的状态改变和其它事件的通知。...moviePlayerView.moviePlayer属性是MPMoviePlayerController类型,它有的controlStyle属性 可以控制播放行为,它的取值有: MPMovieControlStyleFullscreen... {      [player release];      [super dealloc];  }  @end  AVAudioPlayer委托 AVAudioPlayerDelegate委托对象提供了两个主要方法...使用类别后,音频会话要设置“活跃的”Active,这会把后台的任何系统声音关闭。

    1.2K20

    面经之《招聘一个靠谱的iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

    这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。...这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同 assign 类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。...weak 对象,从而设置 nil。...在ARC环境无论是强指针还是弱指针都无需在 dealloc 设置 nil , ARC 会自动帮我们处理 即便是编译器不帮我们做这些,weak也不需要在 dealloc 中置nil: 正如上文的:runtime...使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么? 在ARC下不需要。 在MRC中,对于使用retaincopy策略的需要 。

    997100
    领券