Objective c 使用自定义方法的潜在内存泄漏,不';没有道理
我有这个方法:Objective c 使用自定义方法的潜在内存泄漏,不';没有道理,objective-c,ios,cocoa-touch,memory-management,Objective C,Ios,Cocoa Touch,Memory Management,我有这个方法: -(NSString *)scrambleWordGenerator: (NSUInteger)length { NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""]; for (int i = 0; i < length; i++) { NSUInteger randomIndex = arc4random() % [self.arrayO
-(NSString *)scrambleWordGenerator: (NSUInteger)length {
NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
for (int i = 0; i < length; i++) {
NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
[scrambledWord insertString:randomCharacter atIndex:i];
}
NSString *finalWord = [[NSString alloc] initWithString:scrambledWord];
[scrambledWord release];
return finalWord;
}
不要再犯错误了 否,当您使用
alloc
时,您有责任释放它-通过release
或通过autorelease
将其移动到自动释放池
如果您改用
[NSString stringWithString:
,它将在自动释放池中。否,当您使用alloc
时,您负责释放它-通过release
或通过autorelease
将其移动到自动释放池中
如果您改用
[NSString stringWithString://code>,它将位于自动释放池中。提示:您可以用返回[finalWord autorelease]替换最后一行你们两个都很了不起,非常感谢!我用了西蒙的建议,但Costique,我会考虑其他方法!LumBerry:return
语句中显式的autorelease
有助于提高将来的可读性,尤其是在较长的方法中。另一方面,在最初编写时,您必须确保不会将自动删除发送到无主对象。提示:您可以将最后一行替换为返回[finalWord autorelease]你们两个都很了不起,非常感谢!我用了西蒙的建议,但Costique,我会考虑其他方法!LumBerry:return
语句中显式的autorelease
有助于提高将来的可读性,尤其是在较长的方法中。另一方面,您必须确保在最初编写时不会将autorelease
发送到无主对象。
-(NSString *)scrambleWordGenerator: (NSUInteger)length {
NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
for (int i = 0; i < length; i++) {
NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
[scrambledWord insertString:randomCharacter atIndex:i];
}
NSString *finalWord = [NSString stringWithString:scrambledWord];
[scrambledWord release];
return finalWord;
}