更新后如何访问@public NSArray
或NSMutableArray
?从一个类(class)到另一个类(class)?
我可以通过调用-(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
简单类.m
#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,如果没有 - “不工作!”。它总是显示“不工作!”。
最佳答案
欢迎来到 Objective C!如果您感到不知所措,并且想阅读一些介绍性 Material ,请查看 Peter Hosey 的精彩文章 "Useful Cocoa/Cocoa Touch Links" card 中的链接。 .
您在 -[SimpleClass ButtonGet:]
中创建 MyFirstClass
实例,并且由于其 testArray
成员未在 -[SimpleClass ButtonGet:]
中显式分配给 -[MyFirstClass init]
,它(正确地)初始化为 nil。除非你给它分配其他东西,否则它将永远保持这种状态,但你永远不会这样做。 (您仅在 [MyFirstClass Button:]
中分配给它,但从未调用该方法。)
其他需要考虑的事情:
手动内存管理要求您知道 Cocoa memory management rules并在编写代码时不断牢记它们。例如,将
+[NSArray arrayWithObjects:]
的结果赋值给成员变量时需要保留它,并在-[MyFirstClass dealloc]
中释放它。同样,您需要释放-[SimpleClass dealloc]
中的other
对象。使用属性(使用
@property
声明)比直接引用另一个类的成员变量要干净得多。请考虑遵循Cocoa Coding Guidelines方法名称以小写字母开头。它使您的代码更好地适应系统 API,并使其更易于其他人阅读。
关于xcode - Cocoa:从一个类更新到另一个类后访问@public NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002840/