- (NSString *)instanceMethod

时间:2010-10-06 19:32:42

标签: iphone objective-c ios4

亲爱的iPhone开发者, 我有一个实例方法,意味着返回一个字符串

- (NSString *)newFile:(NSString *)inFile andFileNumber:(NSInteger)aNumber {
    return [NSString stringWithFormat:@"%@.o%i",inFile,aNumber];
}

我将此方法称为

outputFileName = [self newFile:inputFileName andFileNumber:newNumber];
// where inputFileName is a string and newNumber is an integer 
// outputFileName (also a string), inputFileName and newNumber are declared in
// the interface and in the implementation

当我使用Analyzer编译项目时,它会提供以下消息;

  1. Method返回一个带有+0保留计数(非拥有引用)的Objective-C对象
  2. 对象以+0(非拥有)保留计数
  3. 返回给调用者
  4. 具有+0保留计数的对象返回给调用者,其中预期+1(拥有)保留计数
  5. 此外,当它尝试释放outputFileName时,应用程序崩溃。有人知道出了什么问题吗?提前谢谢。

3 个答案:

答案 0 :(得分:8)

问题是惯例的假设。具体来说,静态分析器假定以new开头的任何方法都返回一个保留的对象。这是因为系统API遵循此约定。

重命名您的方法;想到fileNameWithBase:fileNumber:

答案 1 :(得分:1)

您的方法以“new”开头,分析器假定您希望返回具有+1保留计数的对象。更改方法的名称,警告应该消失。

另外:该方法返回一个自动释放的对象;你不应该自己释放它。

答案 2 :(得分:0)

你正在返回一个自动释放的字符串。如果您要向其发送额外的-release-autorelease消息,则下次尝试访问该字符串时,您的应用会崩溃。

您应该花时间阅读Apple开发者文档的“内存管理”部分。