- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这基本上与我的另一个问题有关 here
我正在尝试释放 NSMutableArray
其中包含 View Controller 。我做:
self.viewControllers = nil;
viewWillDisappear
因为我正在转向另一个 View 。但无论我做什么, View Controller 都不会被释放。我也试过:
[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
NSMutableArray
的 View .
NSMutableArray
的引用计数,但我看到实时 View Controller (在仪器中)的计数没有改变是 0。
最佳答案
几个观察:
removeFromSuperview
是不必要的,不会影响retainCount
View Controller 本身。不过,我是否从这次尝试中推断出您已经创建了 View Controller ,然后将它们的 View 添加到 ScrollView 中?如果是这样,您是否做了必要的工作 addChildViewController
对于每一个?如果是这样,您确实需要执行相关的 removeFromParentViewController
不过,对于其中的每一个。 viewControllers
数组,以及如何填充它。@property (nonatomic, retain) NSMutableArray *array;
autorelease
本身的 NSMutableArray
(因为我使用的访问器方法会为我保留它),以及 release
对象的显式 Object
) :- (void)makeArray
{
// create an array, using the accessor method (thus why I'm using an autorelease object)
self.array = [[[NSMutableArray alloc] init] autorelease];
// just add four random objects to the array.
// note, adding them to the array increases their retain count, thus I
// release them to bring the retain count back to +1 ... I could have
// done that via autorelease, too
for (NSInteger i = 1; i < 4; i++)
{
Object *obj = [[Object alloc] initWithString:[NSString stringWithFormat:@"Test %d", i]];
[self.array addObject:obj];
[obj release];
}
}
retainCount
值,我可以看到一切都有 retainCount
+1,视情况而定:- (void)logArray
{
// let's examine the retain counts for the objects in the array
// should be "1" given there are no other strong references anywhere
for (id obj in self.array)
NSLog(@"%s %@ (retainCount = %d)", __FUNCTION__, obj, [obj retainCount]);
// let's also examine the retain count for the array, itself
// this should also be "1"
NSLog(@"%s retainCount = %d", __FUNCTION__, [self.array retainCount]);
}
Object
类在其 NSLog
方法中执行了 dealloc
):- (void)clearArray
{
// let's use the accessor method to release the array and make sure
// the pointer is nil
self.array = nil;
}
self.viewControllers = nil;
语法是一种非常适合释放数组(及其成员对象)的方法,假设数组定义为 retain
属性如上一点所示。但是,如果数组的成员对象没有被释放,那么这些对象显然没有得到它们的 retainCount
降到零。我会尝试,就在您的 self.viewControllers = nil;
之前,记录不仅retainCount
数组本身,还有 retainCount
阵列的单个对象,以确认它们的 retainCount
设置。retainCount
在那一点上+1(否则还有其他东西保留它们,要么因为它们被过度保留,你在这些 View Controller 中有一些保留周期(又名强引用周期),或者其他东西合法地保留它们(例如在某些时候,您将这些 View Controller 之一推送到导航器堆栈上,但您还没有将它们弹出))。 NSTimer
由 View Controller 和失败
invalidate
和
release
需要释放 View Controller 的计时器。与您离线聊天,这听起来可能是您尝试
release
的问题所在。
NSTimer
在
dealloc
,但
dealloc
永远不会调用,因为计时器本身保留了 View Controller 。您需要手动
invalidate
和
release
NSTimer
(通过释放对 View Controller 的强引用)在您释放
NSMutableArray
之前具有计时器的任何 View Controller 。 . (例如,可能有一个停止计时器的协议(protocol),让您的 subview Controller 符合该协议(protocol)。)
关于ios - View Controller 的 NSMutableArray 不释放其对象的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328949/
我在具有 2CPU 和 3.75GB 内存 (https://aws.amazon.com/ec2/instance-types/) 的 c3.large Amazon EC2 ubuntu 机器上运
我想通过用户空间中的mmap-ing并将地址发送到内核空间从用户空间写入VGA内存(视频内存,而不是缓冲区),我将使用pfn remap将这些mmap-ed地址映射到vga内存(我将通过 lspci
在 Mathematica 中,如果你想让一个函数记住它的值,它在语法上是很轻松的。例如,这是标准示例 - 斐波那契: fib[1] = 1 fib[2] = 1 fib[n_]:= fib[n] =
我读到动态内存是在运行时在堆上分配的,而静态内存是在编译时在堆栈上分配的,因为编译器知道在编译时必须分配多少内存。 考虑以下代码: int n; cin>>n; int a[n]; 如果仅在运行期间读
我是 Python 的新手,但我之前还不知道这一点。我在 for 循环中有一个基本程序,它从站点请求数据并将其保存到文本文件但是当我检查我的任务管理器时,我发现内存使用量只增加了?长时间运行时,这对我
我正在设计一组数学函数并在 CPU 和 GPU(使用 CUDA)版本中实现它们。 其中一些函数基于查找表。大多数表占用 4KB,其中一些占用更多。基于查找表的函数接受一个输入,选择查找表的一两个条目,
读入一个文件,内存被动态分配给一个字符串,文件内容将被放置在这里。这是在函数内部完成的,字符串作为 char **str 传递。 使用 gdb 我发现在行 **(str+i) = fgetc(aFil
我需要证实一个理论。我正在学习 JSP/Java。 在查看了一个现有的应用程序(我没有写)之后,我注意到一些我认为导致我们的性能问题的东西。或者至少是其中的一部分。 它是这样工作的: 1)用户打开搜索
n我想使用memoization缓存某些昂贵操作的结果,这样就不会一遍又一遍地计算它们。 两个memoise和 R.cache适合我的需要。但是,我发现缓存在调用之间并不可靠。 这是一个演示我看到的问
我目前正在分析一些 javascript shell 代码。这是该脚本中的一行: function having() { memory = memory; setTimeout("F0
我有一种情况,我想一次查询数据库,然后再将整个数据缓存在内存中。 我得到了内存中 Elasticsearch 的建议,我用谷歌搜索了它是什么,以及如何在自己的 spring boot 应用程序中实现它
我正在研究 Project Euler (http://projecteuler.net/problem=14) 的第 14 题。我正在尝试使用内存功能,以便将给定数字的序列长度保存为部分结果。我正在
所以,我一直在做 Java 内存/注意力游戏作业。我还没有达到我想要的程度,它只完成了一半,但我确实让 GUI 大部分工作了......直到我尝试向我的框架添加单选按钮。我认为问题可能是因为我将 JF
我一直在尝试使用 Flask-Cache 的 memoize 功能来仅返回 statusTS() 的缓存结果,除非在另一个请求中满足特定条件,然后删除缓存。 但它并没有被删除,并且 Jinja 模板仍
我对如何使用 & 运算符来减少内存感到非常困惑。 我可以回答下面的问题吗? clase C{ function B(&$a){ $this->a = &$a; $thi
在编写代码时,我遇到了一个有趣的问题。 我有一个 PersonPOJO,其 name 作为其 String 成员之一及其 getter 和 setter class PersonPOJO { priv
在此代码中 public class Base { int length, breadth, height; Base(int l, int b, int h) { l
Definition Structure padding is the process of aligning data members of the structure in accordance
在 JavaScript Ninja 的 secret 中,作者提出了以下方案,用于在没有闭包的情况下内存函数结果。他们通过利用函数是对象这一事实并在函数上定义一个属性来存储过去调用函数的结果来实现这
我正在尝试找出 map 消耗的 RAM 量。所以,我做了以下事情;- Map cr = crPair.collectAsMap(); // 200+ entries System.out.printl
我是一名优秀的程序员,十分优秀!