xcode - Cocoa:从一个类更新到另一个类后访问@public NSArray

标签 xcode macos cocoa xcode4 osx-lion

更新后如何访问@public NSArrayNSMutableArray?从一个类(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/

相关文章:

macos - ssh:连接到主机 x.x.x.x 端口 22:操作超时

objective-c - 我们如何测量 Cocoa 中文本的可见边界?

xcode - 将 GCC 4.2 设置为 Mac OS X Leopard 上的默认编译器

ios - 如何让一个操作等待另一个操作快速完成

ios - UIGestureRecognizerDelegate 实现不起作用

ios - 更新 XCode 4 到最新的 IOS SDK

C++ 多重继承和 Objective-C。这是 GCC 中的错误吗?

macos - GLSL 示例无法在 Mac 上运行

cocoa - 如何使用 Cocoa 获取具有给定 ID 的包的 URL,反之亦然?

objective-c - 从我的 cocoa 应用程序将文件附加到 Mail.app 中的空白电子邮件