如何确保被许多其他类调用的Objective-C类没有内存泄漏

如何确保被许多其他类调用的Objective-C类没有内存泄漏,objective-c,memory-leaks,Objective C,Memory Leaks,我有下面的控制器类,它将根据flag和param属性的组合执行不同的任务。这两个属性的值将由引用此控制器的许多其他类设置。问题是每个调用类如何分配值,以及何时释放值以避免内存泄漏 @interface SampleController { NSMutableArray *param; NSString *flag; } @property (nonatomic, retain) NSMutableArray *param; @property (nonatomic, reta

我有下面的控制器类,它将根据flag和param属性的组合执行不同的任务。这两个属性的值将由引用此控制器的许多其他类设置。问题是每个调用类如何分配值,以及何时释放值以避免内存泄漏

@interface SampleController {
    NSMutableArray *param;  
    NSString *flag;
}
@property (nonatomic, retain) NSMutableArray *param;
@property (nonatomic, retain) NSString *flag;
@end


@implementation SampleController
@synthesize param;
@synthesize flag;

- (id)init
{
   param = [[NSMutableArray alloc] initWithCapacity:0];
   flag = @"nothing";
}
@end

这取决于你如何称呼你的控制器:

  • 在另一个对象的实例变量中:必须在该对象的释放方法中释放它
  • 在函数中:当您不再需要它时(例如,由另一个对象保留或它完成了此函数中的作业),您应该释放它。如果您要返回它,只需向它发送消息“autorelease”,NSAutoReleasePool将为您执行此任务
  • 要分配值,您可以

  • 使用setParam设置可变数组:(*NSMutableArray)您希望使用替换数组的数组
  • 使用[[yourSampleController参数]addObject:(id)objectYouWantToAdd]直接访问它
  • 或者更方便:[yourSampleController.param addObject:(id)objectYouWantToAdd]
  • 这里的addObject:message是一个示例,您可以在NSMutableArray类引用中看到修改数组(remove、sort,…)的方法

    您将无法修改字符串,因为它是NSString而不是NSMutableString,但您可以通过访问它

  • [yourSampleController getParam]
  • [yourSampleController参数]
  • yourSampleController.param
  • 如果您想避免一般的泄漏,请在泄漏模式下使用Instrument工具构建您的项目,如果您发现一些在函数中声明的对象,请查看泄漏的对象。 您还可以检查Clang Static Analyzer(免费静态调试器),如果您有很多文件,这是非常好的

    我希望我能帮助你

    朱利安