我在.h文件中创建一个NSArray对象:
NSArray *tempArray;
并且我在viewDidLoad()方法中将它分配到.m文件中:
tempArray = [[NSArray alloc] init]; //initilaize
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works)
但我想在另一种方法中使用这个数组,如:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView
我如何组织数组生命周期,因为我使用alloc,retain等,再也无法访问数组生成数据。
答案 0 :(得分:3)
不要在方法中释放数组,而是在dealloc方法中释放它 - 这样你就可以在其他地方使用它。
否则这里还有另一个问题。
在这里,您可以创建一个保留的空不可变 NSArray
tempArray = [[NSArray alloc] init];
现在你覆盖指向该保留实例的指针,但是,你刚刚泄露了一个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 }
}
答案 1 :(得分:2)
您对tempArray的第二个分配将产生内存泄漏,因为永远无法再次访问分配。 connectSeriesJSonBAck
可能会返回自动释放的NSArray
。如果你想继续在当前范围之外引用它,那么你应该保留它:
而不是:
tempArray = [[NSArray alloc] init]; //initilaize
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works)
做
tempArray = [connect connectSeriesJSonBack];
[tempArray retain];
并在您的班级“[tempArray release]
方法”中添加dealloc
。
答案 2 :(得分:0)
如果要访问类中的相同数组,则可以尝试将其设置为类变量,以便可以在整个类中访问其成员。
答案 3 :(得分:0)
我建议在实现中声明它,如
@implementation YourViewController
NSMutableArray *mutableExample;
// or
NSArray *example;
然后在-()viewdidload
中将其分配为mutableExample = [[[NSMutableArray alloc] init]retain];
或只是example = [[NSArray alloc] init];
你可以在每个地方使用它。不要忘记释放它!!!
希望如果有什么不清楚会有帮助在评论中提出它
wblade
答案 4 :(得分:0)
如果从函数[connect connectSeriesJSonBack];
返回自动释放的数组,则tempArray
将在viewDidLoad
方法后返回0。
如何使其发挥作用有两种方法
1)使用NSMutableArray
对象并添加对象
tempArray = [[NSMutableArray alloc] init];
[tempArray addObjectsFromArray:[connect connectSeriesJSonBack]];
2)保留返回的数组
tempArray = [[connect connectSeriesJSonBack] retain];