所以我读了很多书。我终于能够声明一个 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/