将数组保存在代码中的最佳方法

时间:2010-11-10 07:59:41

标签: objective-c

亲爱的。 我需要在代码中保留一些临时信息。当我访问它时,我立即复制我的类,接收结果作为MutableArray,但我必须在其他方法的代码中使用此数组。 我不喜欢再次制作我的课程的即时副本,bcs这需要内存和处理器时间,但我必须在其他方法中使用其余的数组。 目前我将它保留在阵列控制器中,但我想找到其他更好的方法。 由于某些原因,我不喜欢发送指向此MutableArray的指针作为方法的参数。 ProjectArrays.h:

#import <Cocoa/Cocoa.h>
@interface ProjectArrays : NSObject {
NSMutableArray *myMutableArray;    
}
@property (nonatomic, retain) NSMutableArray *myMutableArray;
+(ProjectArrays *)sharedProjectArrays;

@end

ProjectArrays.m:

#import "ProjectArrays.h"
#import "SynthesizeSingleton.h"

@implementation ProjectArrays

SYNTHESIZE_SINGLETON_FOR_CLASS(ProjectArrays)

@synthesize myMutableArray;

- (void)dealloc {
// Clean-up code here.
[myMutableArray release];
[super dealloc];
}

@end

AppDelegate.m:

[[ProjectArrays sharedProjectArrays].myMutableArray addObject:@"Test"];

NSLog (@"This is test first point:%@",[[ProjectArrays sharedProjectArrays].myMutableArray objectAtIndex:0]);

2010-11-21 19:26:18.636 snow [14523:a0f]这是测试第一点:( null)

看起来像代码无关心对象。

1 个答案:

答案 0 :(得分:1)

尝试使用单例模式。创建一些单例类并保留环境变量。

这是有用的标题文件:http://snipplr.com/view/32737/synthesizesingleton-definition-header/

它会帮助你迅速创建单身人士。

<强>编辑:

以下是您要使用的单身人士

//YourSingletonClassName.h
#import <Foundation/Foundation.h>


@interface YourSingletonClassName : NSObject {
  NSMutableArray *myMutableArray;
}

@property (nonatomic, retain)   NSMutableArray *myMutableArray;

+ (YourSingletonClassName *)sharedYourSingletonClassName;

@end


//YourSingletonClassName.m
#import "YourSingletonClassName.h"
#import "SynthesizeSingleton.h"

@implementation YourSingletonClassName

SYNTHESIZE_SINGLETON_FOR_CLASS(YourSingletonClassName)

@synthesize myMutableArray;

- (id) init
{
  self = [super init];
  if (self != nil) {
     self.myMutableArray = [NSMutableArray new];
  }
  return self;
}


- (void) dealloc {
  [myMutableArray release];
  [super dealloc];
}

@end

你可以在YourSingletonClassName之间的任何地方拨打[YourSingletonClassName sharedYourSingletonClassName];,你不应该分配/初始化它,例如:

[[YourSingletonClassName sharedYourSingletonClassName].myMutableArray addObject:@"some_object_to_add"];

请谷歌搜索单身模式并深入了解对象概念。