iPad large NSArray - initWithObjects vs. ArrayWithObjects

时间:2011-03-01 13:25:41

标签: iphone nsarray ios-simulator

任何人都可以为我清楚这一点吗? 我正在构建一个iPad应用程序,它有一个TableViewController,可以显示1000到2000个字符串之间的内容。 我在单身人士中有那些NSStrings 在Singleton的init方法中,我初始化一个包含所有数据的数组(不一定是最后的方法 - 只是快速复制和粘贴测试)
我做了一个self.someArray = [[NSArray alloc]initWithObjects:后面跟着大量的字符串,接着是nil 在模拟器中运行良好 - 但在应用程序启动时崩溃,iPad上的访问权限很差 如果我使用方便方法[NSArray arrayWithObjects: - 它可以正常工作 我查看了仪器,应用程序的整体内存占用量仅为2.5 MB左右 现在我不知道它为什么单向运行而不是另一条运行。
编辑:

#import "StaticValueContainer.h"`

static StaticValueContainer* instance = nil;
@implementation StaticValueContainer
@synthesize customerRatingKeys;

+(StaticValueContainer*)sharedInstance
{
    if (instance == nil){
        instance = [[StaticValueContainer alloc]init];
    }
    return instance;
}

-(id)init
{
    if  ( ( self = [super init] ))
    {
        [self initCustomerRatingKeys];

    }
    return self;
}
-(void)init customerRatingKeys
{
 self.customerRatingKeys = [[NSArray alloc]initWithObjects:
 @"string1",
....
 @"string1245"

,nil
}

正如我所说:它在self.customerRatingKeys = [[NSArray alloc]initWithObjects:设备上崩溃 但适用于* self.customerRatingKeys = [[NSArray arrayWithObjects ...`

1 个答案:

答案 0 :(得分:7)

嗯,它们之间没有太大的区别:arrayWithObjects返回一个你不需要自己发布的自动发布的数组(除非你随后保留它),并且initWithObjects返回一个必须释放的数组,以避免内存泄漏。表现明智,它们之间没有区别。

我建议如果您使用initWithObjects而不是arrayWithObjects收到错误的访问错误,则代码中可能会出现某种内存管理错误。如果您发布代码本身,您可能会得到更准确的响应。