gpt4 book ai didi

iphone - extern NSMutableArray 有什么问题?

转载 作者:行者123 更新时间:2023-12-03 20:36:00 25 4
gpt4 key购买 nike

所以我读了很多书。我终于能够声明一个 extern MutableArray 并从不同的 View 访问它。我有两种看法:1) 测试 View Controller 2)测试2

我将数组声明如下:测试ViewController.h

extern NSMutableArray *myArray;

#import <UIKit/UIKit.h>

@interface TestingViewController : UIViewController {

}

我在TestingViewController加载时初始化数组。然后我可以将测试 2 中的对象添加到其中,如下所示:测试2.m

#import "Test2.h"

NSMutableArray *myArray;
@implementation Test2

-(IBAction)addToArray{
[myArray addObject:@"Hot like Mexico"];
NSLog(@"Object was added to Array! Count: %d",[myArray count]);
}

它似乎在两个 View 中都有效。即使在切换时计数和对象也是一致的。

我想知道的是,这到底是怎么回事?我知道很多经验丰富的程序员讨厌全局变量,但我让它工作的唯一方法就是像上面那样通过 AppDelegate (不想那样做)。只是想提高从多个 View 添加和操作数组的效率。

谢谢大家!

最佳答案

如果您确实需要一个“全局”对象,这里有一个我经常使用的简单模式 - 好吧,不是很多,因为我不倾向于有很多全局变量。

决定您希望它属于哪个类。假设 Test2 是放置它的逻辑类。在 Test2 中创建一个方法来访问该变量。 (可以是类方法或实例方法)如下:

@interface Test2 : NSObject
{
// ivars
}

+(NSMutableArray*) myArray; // could also be an instance method

@end

@implementation Test2

+(NSMutableArray*) myArray
{
static NSMutableArray* theValue = nil;
@synchronized([Test2 class]) // in a single threaded app you can omit the sync block
{
if (theValue == nil)
{
theValue = [[NSMutableArray alloc] init];
}
}
return theValue;
}
@end

编辑:使用类方法,从任何地方访问 myArray 只需执行以下操作:

#import "Test2.h"

// To use class method, send messages to the class itself

[[Test2 myArray] addObject: @"foo bar"];
id foo = [[Test2 myArray] objectAtIndex: 0];

关于iphone - extern NSMutableArray 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082152/

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