【问题标题】:memory management arrays内存管理数组
【发布时间】:2012-08-03 21:54:15
【问题描述】:

例如,我在应用程序中创建了几个数组:

NSString *ItemsA[91];
 int GroupRep[11];
 double TaxR[16];
 short InputT[200];
 BOOL tmpEx[20];  

并且需要这些结构在应用程序结束前通过应用程序可用。 我的问题是: 一世。我需要明确分配 NSString 的数组还是可以以这种方式初始化每个数组单元格:例如 ItemsA[10] = @"use option1"。

二。我需要释放或释放上述任何数组吗

三。我知道如果我没有专门使用 alloc,那么 iOS 将自动执行保留/释放操作。如果是这样呢:

UITapGestureRecognizer *gestur1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dispR)];

同样,我正在创建一个类:

   myClass=[[PieClass alloc]initWithFrame:CGRectMake(1+ipX, ipY, 320, rView.frame.size.height)];
    ...
    [myClass release]

这个类分配他自己的东西。我需要像上面那样释放每个类还是只释放整个类就足够了。

谢谢

【问题讨论】:

    标签: iphone objective-c ipad


    【解决方案1】:

    一般来说,不要使用语言数组来存储对象。使用NSMutableArray 实例;它们的开销相对较小(可能无法衡量),而且更加自然。

    您还需要将任何值存储在可本地化的文件中以供显示。因此,您需要加载所述文件,并且再次将它们存储在 NSArray 中要容易得多。 developer.apple.com 上有大量关于该主题的文档。

    最后,这看起来像是您的应用数据。因此,您可能真的希望有一个适当的模型层来管理所述数据。有一天,您可能想要重构应用程序以从服务器中提取所述数据,并且拥有适当的模型层将帮助您做到这一点。

    请注意,您通常可以将模型(数据管理的东西)从应用程序委托中挂起。或者您可以通过某个地方的单例访问它。

    这是一个有点高级别的答案,目的是尝试将您引导到一条更符合预期模式的路径。

    【讨论】:

    • 感谢您的意见。放置一个数据层听起来是个好主意,并且在我重构应用程序时会这样做。
    • 现在我只是想深入研究内存管理,虽然我知道基本规则,即如果你分配、复制或新建对象,你就拥有它,有时我不确定确切的时间释放 obj 内存。例如,如果我有一个方法可以用一些值和计算初始化一个数组,并且我在其中有 alloc。我通过应用程序需要这些值,如果我需要重新计算新值,有时需要再次调用该方法,那么我什么时候释放分配?在应用程序结束时还是在我调用该方法之前或之后?希望它有意义,如果需要我可以详细说明
    • 不确定我是否理解“数据管理的东西——关闭你的应用程序委托”......如果你能详细说明它的话。
    猜你喜欢
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多