Iphone NSArray生命周期
我在.h文件中创建了一个NSArray对象:Iphone NSArray生命周期,iphone,objective-c,ios,nsarray,Iphone,Objective C,Ios,Nsarray,我在.h文件中创建了一个NSArray对象: NSArray *tempArray; 然后我在viewDidLoad方法的.m文件中分配它: tempArray = [[NSArray alloc] init]; //initilaize tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works) 但我想在另一种方法中使用此数组,如: - (void)scrollViewDidEndDecelerat
NSArray *tempArray;
然后我在viewDidLoad方法的.m文件中分配它:
tempArray = [[NSArray alloc] init]; //initilaize
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works)
但我想在另一种方法中使用此数组,如:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView
我如何组织阵列生命周期,因为我使用alloc、retain等。无法再次访问阵列数据。如果希望访问类中的同一阵列,则可以尝试将其作为类变量,以便在整个类中访问其成员 我建议在执行过程中像
@implementation YourViewController
NSMutableArray *mutableExample;
// or
NSArray *example;
然后在-viewdidload中像mutableExample一样alloc=[[[NSMutableArray alloc]init]retain];
或者只是示例=[[NSArray alloc]init]
而且你可以在任何地方使用它。别忘了发布它
如果有不清楚的地方,希望能有所帮助,在评论中提问
wblade不要在方法中释放数组,而是在dealoc方法中释放它-这样您就可以在其他地方使用它 否则,这里还有另一个问题 这里创建一个保留的、空的、不可变的NSArray 现在你覆盖了指向那个保留实例的指针,耶,你刚刚泄露了一个NSArray
tempArray = [connect connectSeriesJSonBack];
该方法应该返回一个自动删除的NSArray。一旦你点击一个事件循环,它会自动释放并消失
你应该这样做
-(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 }
}
您对tempArray的第二次分配将产生内存泄漏,因为无法再次访问该分配。connectSeriesJSonBAck可能会返回自动删除的NSArray。如果要在当前范围之外继续引用它,则应保留它: 而不是:
tempArray = [[NSArray alloc] init]; //initilaize
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works)
做
并在类的dealloc方法中添加[tempArray release]。如果从函数[connect connectSeriesJSonBack]返回自动释放的数组;在viewDidLoad方法之后,tempArray的返回计数将为0 有两种方法可以让它工作 1使用NSMutableArray对象并添加对象
tempArray = [[NSMutableArray alloc] init];
[tempArray addObjectsFromArray:[connect connectSeriesJSonBack]];
2保留返回的数组
tempArray = [[connect connectSeriesJSonBack] retain];
同一类中的另一个方法?是的,mihir是同一个类,我不明白为什么我不能访问数组的数据?如果你在.h文件中创建了tempArray。。。然后您应该直接访问该类中的tempArray。。。不需要做任何事。。。。除非您在访问它之前发布它,否则术语是instance variable或ivarThank you Diederik,它是有效的。我应该阅读内存管理教程。但你能马上告诉我吗?为什么我不能分配、初始化这个对象并保留它?你问Diederik,但也许我可以给你答案,因为你从[connect connectSeriesJSonBack]得到的;是一个alloced nsarray。您只需保留它。[connect connectSeriesJSonBack]不知道您将它分配给什么-doing[[nsarray alloc]init]创建一个全新的对象,然后[connect connectSeriesJSonBack]做同样的事情-浪费一个对象。对于其他问题,请阅读
tempArray = [[NSMutableArray alloc] init];
[tempArray addObjectsFromArray:[connect connectSeriesJSonBack]];
tempArray = [[connect connectSeriesJSonBack] retain];