Objective c ApplicationIDFinishLaunching变量范围问题?
只是一个简单的问题。我有一个NSArray,它是在ApplicationIDFinishLaunching方法中生成的,但由于某些原因,该数组没有被其他方法使用,并且表示它未被使用Objective c ApplicationIDFinishLaunching变量范围问题?,objective-c,xcode,cocoa,nsarray,Objective C,Xcode,Cocoa,Nsarray,只是一个简单的问题。我有一个NSArray,它是在ApplicationIDFinishLaunching方法中生成的,但由于某些原因,该数组没有被其他方法使用,并且表示它未被使用 -(void)applicationDidFinishLaunching... { NSArray* songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil]; -(id)tableView:(NSTableView *)tableVi
-(void)applicationDidFinishLaunching... {
NSArray* songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil];
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn... {
for(NSXMLElement* song in songsArray) {
我也在头文件中声明了变量
干杯,
Scott您已将
songsArray
声明为局部变量,它在ApplicationIDFinishLaunching
外部不可见
如果您已经在标头中声明了变量,则只需分配它:
-(void)applicationDidFinishLaunching... {
songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil];
关于内存管理的注意事项:
如果您不使用ARC,您还需要保留
您的阵列,否则它将在ApplicationIDFinishLaunching
结束时自动删除,并且您的变量将指向释放的内存,您的应用程序将崩溃
不要忘记在
dealloc
中释放它(同样,如果您不在ARC land中)。您可能在标题中声明了一首songsArray
,但您没有在中分配它-应用程序:didfishLaunching:
。相反,您创建了一个具有相同名称的局部变量,该变量只会保留在作用域中,直到方法结束。按如下方式分配ivar:
songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil];
您正在方法范围内创建
songsArray
,需要将其作为类变量添加,如下所示:
MyApplication.h
@interface MyApplication {
NSArray *songsArray;
}
MyApplication.m
- (void)applicationDidFinishLaunching… {
songsArray = [[root nodesForXPath:@".//dict/dict/dict" error:nil] retain];
}
- (void)dealloc {
[songsArray release];
songsArray = nil;
}
注意,您还需要保留它,以便在NSAutoReleasePool
耗尽时阵列不会自动释放