iphone - extern NSMutableArray 有什么问题?

标签 iphone objective-c sdk nsmutablearray

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

相关文章:

iphone - 如何在派生类中分配全局 NSInteger 对象

iphone - 如何从 iPhone 中的 .DBF 文件中获取数据

iphone - iOS:viewDidLoad 中的 View 高度设置不正确

ios - 将 NSMutable 字典保存到文档时遇到问题。 UIImage 不会保存/显示

Android 模拟器 - 缺少快照选项?

iphone - UIWebView 和 Richtext 文件

iphone - 如何在图像 (*.png) 周围绘制轮廓/描边 - 内部示例

iphone - 按下时 UILongPressGestureRecognizer 被调用两次

c++ - 使用 DLL 作为 C++ 游戏 SDK 发布的安全性(dll 已修改,exe 永不修改)

sdk - 如何使用JS SDK动态嵌入 "tiny"版本的Soundcloud播放器?