gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:32:53 26 4
gpt4 key购买 nike

更新后如何访问@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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com