任何人都可以为我清楚这一点吗?
我正在构建一个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 ...`
答案 0 :(得分:7)
嗯,它们之间没有太大的区别:arrayWithObjects
返回一个你不需要自己发布的自动发布的数组(除非你随后保留它),并且initWithObjects
返回一个必须释放的数组,以避免内存泄漏。表现明智,它们之间没有区别。
我建议如果您使用initWithObjects
而不是arrayWithObjects
收到错误的访问错误,则代码中可能会出现某种内存管理错误。如果您发布代码本身,您可能会得到更准确的响应。