Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Objective-C上的释放对象尚未释放

Objective-C上的释放对象尚未释放
EN

Stack Overflow用户
提问于 2012-02-13 15:42:26
回答 3查看 76关注 0票数 1

我正在尝试创建一个方法来释放我由于任何原因还没有释放的对象。我将这个添加到我的ViewController的dealloc方法中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (id object in [self.view subviews]){
    NSLog(@"/n") ;
    NSLog(@"%@", object) ;

    if([object isKindOfClass:[UIView class]]){
        if (malloc_size(object)>0) {
            NSLog(@"-> Releasing object with size: %zd", malloc_size(object)) ;    
            [object release] ;
        }
    }
}

不幸的是,应用程序崩溃了。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-13 15:45:06

我做错了什么?

你没有平衡你的保留和释放。在您的示例中,您永远不需要这样的代码。如果你保留了一些东西,当你用完它时就释放它。其他任何事情都是在自找麻烦。

特别是在这段代码中,您将释放视图的所有子视图。您的代码是否保留了所有这些视图?如果不是,你就不应该释放它们。若有,原因为何?你对每一个都有单独的引用吗?您的视图将保留您作为子视图添加的任何视图;只有当您有其他对它们的引用时才需要保留它们(有些人甚至选择不保留它们)。

票数 4
EN

Stack Overflow用户

发布于 2012-02-13 15:45:45

您释放的对象可能已经释放,并且仅由将其作为子视图保留的视图保留。由于您的版本不会将视图从其superview中删除,因此在视图层次结构中最终会出现一个死对象。当视图被释放或重新绘制其所有子视图时,这将崩溃。

票数 1
EN

Stack Overflow用户

发布于 2012-02-13 15:48:27

对于视图,大多数情况下,您必须首先从superview中删除视图,否则您将释放superview仍然需要或保留引用的对象。

你不应该这样做,你应该在保留和释放之间取得良好的平衡。

作为额外的,这是我真的不知道的:使用malloc_size正确吗

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9263343

复制
相关文章
iOS[UIImage imageNamed:]生成的对象释放时机
如果使用imageNamed这个方法加载一些比较大的资源文件就容易崩溃,从而引发了imageNamed生成的对象什么时候释放? 使用imageNamed这个方法生成的UIImage对象,会在应用的bu
赵哥窟
2019/03/11
1.4K0
Java 对象释放与 finalize 方法
本文谈论的知识很浅显,只是我发现自己掌握的相关知识并不扎实,对细节并不清楚,遂将疑惑解开,并记录于此。
零式的天空
2022/03/08
8420
Java 对象释放与 finalize 方法
本文谈论的知识很浅显,只是我发现自己掌握的相关知识并不扎实,对细节并不清楚,遂将疑惑解开,并记录于此。
mzlogin
2020/04/15
2.5K0
objective-C 的内存管理之-自动释放池(autorelease pool)
如果一个对象的生命周期显而易见,很容易就知道什么时候该new一个对象,什么时候不再需要使用,这种情况下,直接用手动的retain和release来判定其生死足矣。但是有些时候,想知道某个对象在什么时候不再使用并不那么容易。如果下面的代码,看上去非常简单: Sample.h类接口部分 #import < Foundation / Foundation.h > @interface Sample : NSObject { } -(NSString*) toString; @end Sample.m 类实现
菩提树下的杨过
2018/01/22
1K0
[Linux]释放SWAP
监控报警一个PVE节点的SWAP使用满了。一看的确如此,关键是节点本身的内存还大量闲着。
用户9314062
2022/05/20
1.9K0
[Linux]释放SWAP
JDBC的资源释放
1.1 JDBC的资源释放 1.1.1 JDBC资源释放 JDBC程序执行结束后,将与数据库进行交互的对象释放掉,通常是ResultSet,Statement,Connection。 这几个对象中尤其是Connection对象是非常稀有的。这个对象一定要做到尽量晚创建,尽早释放掉。 将资源释放的代码写入到finally的代码块中。 资源释放的代码应该写的标准: if(rs != null){ try { rs.close(); } catch (SQLException e)
兮动人
2021/06/11
9950
释放NFV的潜力
网络功能虚拟化(NFV)前景广阔。 NFV是下一代网络架构,它用运行在商品硬件上的虚拟设备取代了在专用硬件上运行的软件。NFV意味着能够随时在任何硬件上部署软件功能 ,并且具有高互操作性,因此任意功能都可以在厂商之间切换和混合。但是这个承诺没有实现。
SDNLAB
2018/12/28
9360
释放NFV的潜力
dubbo 释放端口
加个监听器: DubboProtocol.getDubboProtocol().destroy(); /     服务监听器     @author marker   Created by marker on 2016/12/27.  / public class DubboServiceListener  implements ServletContextListener {     / 日志记录 */     private Logger logger = LoggerFactory.getLogger
小贝壳
2020/03/05
2K0
如何证明sleep不释放锁,而wait释放锁?
从上述代码可以看出,我们给 wait() 和 notify() 两个方法上了同一把锁(locker),但在调用完 wait() 方法之后 locker 锁就被释放了,所以程序才能正常执行 notify() 的代码,因为是同一把锁,如果不释放锁的话,是不会执行 notify() 的代码的,这一点也可以从打印的结果中证实(结果输出顺序),所以综合以上情况来说 wait() 方法是释放锁的。
磊哥
2020/07/22
2.7K0
DirectByteBuffer内存释放
网络编程为避免频繁的在用户空间与内核空间拷贝数据,通常会直接从内核空间中申请内存,存放数据,在Java中,把内核空间的内存称之为直接内存,nio包中的ByteBuffer的allocateDirect方法,就是申请直接内存
JavaEdge
2021/12/07
3.3K0
DirectByteBuffer内存释放
iframe内存释放
Ext 核心开发人员Jack的回答是,TabPanelItem在关闭时并不会对自定义到tab中的元素做特殊处理,这部分工作必须在控件外来完成。另一方面, 相关资料称IE在iframe元素的回收方面存在着bug,在通常情况下应该将该元素的src属性值修改为”abort:blank”,并手工将其从 DOM树上移除,然后把脚本中引用它的变量置空并调用CollectGarbage()就可以避免iframe不能正常回收所造成的内存泄露。
河岸飞流
2019/09/11
5.1K0
Greenplum释放表的空间
Greenplum支持行储存(HEAP储存)与列(append-only)储存,对于AO存储,虽然是appendonly,但实际上GP是支持DELETE和UPDATE的,被删除或更新的行,通过BITMAP来标记删除与修改。AO存储是块级组织,当一个块内的数据大部分都被删除或更新掉时,扫描它浪费的成本实际上是很高的。而PostgreSQL是通过HOT技术以及autovacuum来避免或减少垃圾的。但是Greenplum没有自动回收的worker进程,所以需要人为的触发。接下来就分析AO表与HEAP表的问题以及如何解答,执行空间的释放有3中方法分别是:
小徐
2019/08/05
1.3K0
Greenplum释放表的空间
病毒写法,资源的释放.
为什么说是病毒写法资源释放.其实技术是把双刃剑.可以做好事也可以做坏事.我们知道.程序的本质就是二进制.所以在VS中我们可以添加二进制数据并且释放出来.释放的资源可以是你自定义的.也可以是已有的资源. 那么资源如何加载以及释放
IBinary
2019/05/25
1.1K0
fans/ren/cloud/co 后缀上新 /Radix 白金域名优质域名释放/art 白金域名优质域名释放
 fans/ren/cloud/co 后缀上新 Fans 普通词新注首年仅要60元 【点击发现更低价格↑】 ren 普通词新注首年仅要30元 【点击发现更低价格↑】 cloud 普通词新注首年 10元 co 普通词新注首年 45元 后缀上新,等你来pick!点击抵达【活动现场】 白金域名优质域名释放  Radix 白金域名优质域名释放 ART 白金域名优质域名释放 (白金词超短字母组合,先到先得~) 点击抵达【活动现场】 ---- #插播小广告一则# 腾讯企业邮 唯一能用微信收发的企业邮箱 秉承QQ邮箱
腾讯云DNSPod团队
2021/03/12
9.4K0
CA2000:丢失范围之前释放对象
创建了 IDisposable 类型的本地对象,但该对象不会被释放,除非对对象的所有引用都超出范围。
呆呆
2022/02/26
8940
漫画:如何证明sleep不释放锁,而wait释放锁?
从上述代码可以看出,我们给 wait() 和 notify() 两个方法上了同一把锁(locker),但在调用完 wait() 方法之后 locker 锁就被释放了,所以程序才能正常执行 notify() 的代码,因为是同一把锁,如果不释放锁的话,是不会执行 notify() 的代码的,这一点也可以从打印的结果中证实(结果输出顺序),所以综合以上情况来说 wait() 方法是释放锁的。
一个正经的程序员
2022/04/11
1.1K0
漫画:如何证明sleep不释放锁,而wait释放锁?
centos7释放内存|yum清理缓存与释放内存
腾讯云服务器内存占用过高,安装的是centos7系统,准备对centos7释放内存,发现使用yum清理缓存与释放内存非常的方便,先使用free -m命令来查看centos7系统剩余了多少内存,准备清理掉,如下:
拓荒者
2019/03/16
9.8K0
Mongodb 定时释放内存
对于主要是写入的数据库,mongodb内存占满之后写入效率会变得不稳定 这个时候,你需要释放内存(可试用db.runCommand({closeAllDatabases:1}) )实现 下面的c#代码可以用来定时释放内存,使用的时候注意把路径换成你服务器的路径,另外就是修改下释放频率 Technorati 标签: mongodb class Program { static void Main(string[] args) { while (t
JadePeng
2018/03/12
5.2K0
点击加载更多

相似问题

释放可能尚未创建的对象

40

Objective-C -对象实例被释放/释放的测试

61

Objective-C自动释放池不释放对象

20

Objective-C ++释放对象

50

Objective-c对象释放模式

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文