NSArray的生命周期
我创建.h文件中一个NSArray对象:NSArray的生命周期
NSArray *tempArray;
,比我的Alloc它在.m文件中viewDidLoad中()方法:
tempArray = [[NSArray alloc] init]; //initilaize
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works)
但我想用这个阵列中的另一个方法,如:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView
我怎么能组织阵列的生命周期,因为我用的页头,再次达阵数据保留等没有办法。
你的第二次转让将产生一个内存泄漏,因为分配永远无法再次访问。 connectSeriesJSonBAck
可能会返回自动发布NSArray
。如果你想保持引用它在当前范围之外,那么你应该保留它:而不是
:
tempArray = [[NSArray alloc] init]; //initilaize
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works)
做
tempArray = [connect connectSeriesJSonBack];
[tempArray retain];
,并在你的类dealloc
方法添加[tempArray release]
。
谢谢Diederik,它的作品我应该阅读一个内存管理教程。但你可以很快说出来吗?为什么我不能分配,初始化这个对象并保留它? – NevzatR 2011-03-10 10:10:55
你问Diederik,但可能我可以给你答案,这是因为你从[connect connectSeriesJSonBack]得到了什么;是一个分离的nsarray,你只需要保留它。 – Csabi 2011-03-10 10:17:41
[连接connectSeriesJSonBack]不知道你将它分配给 - 做[[NSArray alloc] init]创建一个全新的对象,然后[connect connectSeriesJSonBack]做同样的事情 - 浪费一个对象。对于其他问题,请阅读http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDB – Dre 2011-03-10 10:46:40
如果你想访问类中的同一个数组,那么你可以尝试使它成为一个类变量,以便它的成员可以在整个类中访问。
术语是“instance变量“或”伊娃“ – dreamlax 2011-03-10 10:08:14
我建议declar它implemantation像
@implementation YourViewController
NSMutableArray *mutableExample;
// or
NSArray *example;
然后在-()viewdidload
ALLOC它像mutableExample = [[[NSMutableArray alloc] init]retain];
或只是example = [[NSArray alloc] init];
和您可以使用它的每where.do不会忘记释放吧! !
希望它帮助,如果有任何不明白请在注释
wblade
谢谢Csabi为你的答案和帮助.. – NevzatR 2011-03-10 10:26:21
勿放于法阵,而是在dealloc方法释放它 - 这样你可以使用它在其他地方。
否则这里还有另一个问题。
在这里,您创建一个保留的,空的,不变的NSArray
tempArray = [[NSArray alloc] init];
现在你覆盖指针指向留存情况下,耶,你刚刚泄露一个NSArray
tempArray = [connect connectSeriesJSonBack];
这方法应该返回一个自动释放的NSArray。当你遇到事件循环时,它会自动释放并消失。
你应该做的事情像这个tempArray
-(void)whereverThisIs {
// Do not retain here if connectSeriesJSonBack returns a retained instance
tempArray = [[connect connectSeriesJSonBack] retain];
}
-(void)dealloc {
[tempArray release];
}
-(void)anotherMethod {
if (tempArray) { // Do things }
}
真的很好解释好答案谢谢Dre – NevzatR 2011-03-10 10:15:40
如果您从函数[connect connectSeriesJSonBack];
返回的自动释放数组比您的tempArray
在viewDidLoad
方法后的返回计数为0。
有2个方法是如何使它工作
1)使用NSMutableArray
对象并添加对象
tempArray = [[NSMutableArray alloc] init];
[tempArray addObjectsFromArray:[connect connectSeriesJSonBack]];
2)保留在返回的数组
tempArray = [[connect connectSeriesJSonBack] retain];
在另一种方法同班... ? – 2011-03-10 09:55:02
是mihir同一班,我不明白为什么我无法达到阵列的数据? – NevzatR 2011-03-10 09:57:37
如果您在.h文件中创建了tempArray,那么您应该直接访问该类中的tempArray ...不需要执行任何操作....除非您在访问它之前先释放它 – 2011-03-10 10:03:19