更新后如何访问@public NSArray
或NSMutableArray
?从一堂课到另一堂课?
我可以在程序启动时通过调用-(id)init
..来访问它,但是如果以后要更新它,则显示为nil。有什么问题?
简单的示例代码:
MyFirstClass.h
#import <Foundation/Foundation.h>
@interface MyFirstClass : NSObject
{
@public
NSArray *testArray;
}
-(IBAction)Button:(id)sender;
@end
MyFirstClass.m
#import "MyFirstClass.h"
@implementation MyFirstClass
- (id)init {
if (self = [super init]) {
//I can take this Array from here
//testArray = [NSArray arrayWithObjects: @"first", @"second", @"third", nil];
}
return self;
}
-(IBAction)Button:(id)sender {
//How take this Array?
testArray = [NSArray arrayWithObjects: @"first", @"second", @"third", nil];
}
@end
SimpleClass.h
#import <Foundation/Foundation.h>
#import "MyFirstClass.h"
@interface SimpleClass : NSObject
{
MyFirstClass *other;
}
-(IBAction)ButtonGet:(id)sender;
@end
简单类
#import "SimpleClass.h"
#import "MyFirstClass.h"
@implementation SimpleClass
-(IBAction)ButtonGet:(id)sender {
other = [[MyFirstClass alloc] init];
if(other->testArray) {
NSLog(@"Working!");
}
else { NSLog(@"Not working!"); }
}
@end
创建的示例在* .xib中具有两个按钮。一个名为“ Button”的按钮(MyFirstClass),另一个名为“ ButtonGet”的按钮(SimpleClass)。因此,在程序启动时需要先按“ Button”,然后按“ ButtonGet”,然后NSLog应该写“ Working!”。如果它获得了testArray,如果不是,则为“不起作用!”。它总是显示“不工作!”。
最佳答案
欢迎来到目标C!如果您不知所措,并且想阅读一些入门资料,请查看Peter Hosey出色的"Useful Cocoa/Cocoa Touch Links" card中的链接。
您在MyFirstClass
中创建-[SimpleClass ButtonGet:]
实例,由于未在testArray
中显式分配其-[MyFirstClass init]
成员,因此(正确)将其初始化为nil。除非您为它分配了其他内容,否则它将永远保持这种状态,但是您永远不会这样做。 (您只能在[MyFirstClass Button:]
中分配给它,但从不调用该方法。)
要考虑的其他事项:
手动内存管理要求您了解Cocoa memory management rules,并在编写代码时始终牢记它们。例如,当将+[NSArray arrayWithObjects:]
的结果分配给成员变量时,需要保留该结果,并在-[MyFirstClass dealloc]
中释放它。同样,您需要释放other
中的-[SimpleClass dealloc]
对象。
使用属性(使用@property
声明)比直接引用另一个类的成员变量要干净得多。
请考虑使用Cocoa Coding Guidelines,并以小写字母开头。它使您的代码更适合系统API,并使其他人更容易阅读。