iphone – 在NSMutableArray中存储对象时出现问题

iphone – 在NSMutableArray中存储对象时出现问题,第1张

概述我正在iPhone上开发,而且我错过了一些关于在NSMutableArray中存储对象的东西 – 我做错了什么,我应该如何解决这个问题? 代码的相关部分是 我有一个定义的对象Entity,它直接从NSObject继承.在我的GLView类中,我想定义一个这样的数组 – 所以GLView.h @interface GLView : UIView{ BOOL controllerSetup; 我正在iPhone上开发,而且我错过了一些关于在NSMutableArray中存储对象的东西 – 我做错了什么,我应该如何解决这个问题?

代码的相关部分是

我有一个定义的对象Entity,它直接从NSObject继承.在我的GLVIEw类中,我想定义一个这样的数组 – 所以GLVIEw.h

@interface GLVIEw : UIVIEw{    BOol controllerSetup;    // Entity etc - first development task it to get one up    NSMutableArray *arrEntitIEs;}@property(nonatomic,assign) NSMutableArray *arrEntitIEs;

并且在drawVIEw函数的主体中 – 由timer事件多次调用 – 我分配数组,并且,对于初始开发,只需要一个Entity对象并将其添加到数组中

- (voID)drawVIEw{    if(!controllerSetup) { // initialize on first call        [controller setupVIEw:self];        controllerSetup = YES;        arrEntitIEs = [NSMutableArray array];        Entity* thisEntity = [[Entity alloc] initEntity];           [arrEntitIEs addobject:thisEntity];    }    Entity *entity = [arrEntitIEs objectAtIndex:0];    [entity tickEntity:0.1];}

我的理解是,在第一次调用drawVIEw时,NSMutableArray将被设置并且Entity的实例被添加到它,然后在body中指向存储在数组中的第一个实体副本的指针被检索并被 *** 纵(显然我打算添加更多并稍后循环它们).

然而,在第一次调用该过程时,一切正常,objectAtIndex检索实体指针并且所有工作都会发生.但是在第二次调用时,当controllerSetup为true且初始化子句未执行时,arrEntitIEs为空,程序崩溃,因为objectAtIndex检索为nil.

那么我做错了什么?为什么我存储的Entity对象不会在NSMutableArray中持久存在?

解决方法 尝试使用以下内容替换您创建arrEntitIEs的行:

arrEntitIEs = [[NSMutableArray alloc] init];

然后确保将其添加到dealloc方法:

- (voID)dealloc{     [arrEntitIEs release];     [super dealloc];}

基本上,因为你没有明确地分配你的数组(你使用的是静态数组方法),所以它是自动释放的.当阵列已自动释放并且您的代码尝试访问它时,您的程序崩溃.

还有一件事:

Entity* thisEntity = [[Entity alloc] initEntity];   [arrEntitIEs addobject:thisEntity];[thisEntity release]; // add this

如果你不释放thisEntity,它将泄漏. addobject保留传递的对象.

总结

以上是内存溢出为你收集整理的iphone – 在NSMutableArray中存储对象时出现问题全部内容,希望文章能够帮你解决iphone – 在NSMutableArray中存储对象时出现问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1004229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存