1

我想创建一个具有我需要的常用功能的实用程序类。所以它们必须是静态的,而不是泄漏内存。

假设我想添加这个将 NSString 转换为 NSNumber 的函数:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:@"42"];
[f release];

我怎样才能返回结果而不泄漏?

我必须为此使用自动释放吗?

4

1 回答 1

3

当返回具有不确定所有权的对象时,使用自动释放来避免内存泄漏。NSNumbernumberFromString:方法已经返回一个自动释放的值,所以你不需要在你的情况下做任何特别的事情。对于其他类的对象,您可以这样做:

MyClass *ret = [[[MyClass alloc] initWithSomeValue:42] autorelease];

请注意,如果您使用 ARC,则无需执行任何操作:编译器足够聪明,可以为您解决大部分问题。

在 Java/C++/C# 的 Objective C 中,静态方法被称为类方法+您在声明中用 a而不是表示它们-,并记住您不能从实现中访问实例方法。

在标题中:

@interface MyHelper : NSObject
+(NSString*)format:(NSNumber*)num;
@end

在实施中:

@implementation MyHelper

+(NSString*)format:(NSNumber*)num {
    return [num stringValue];
}

@end
于 2012-07-05T18:32:30.463 回答