这可能是一个愚蠢的问题,但它一直困扰着我。
假设我们有一个将NSString
对象作为参数并对该NSString
对象执行某些操作的方法,
- (void)someMethod:(NSString *)str
{
//do something with str
}
考虑这段代码
[someObject someMethod:[[NSString alloc] initWithFormat:@"Hello World!"]];
由于alloc
已用于创建字符串作为 someMethod 的参数,因此release
无论是在 pre-ARC 环境中显式还是在 ARC 下隐式都必须对其进行平衡。但似乎我们无法获得指向字符串的指针,因为我们从未将它分配给任何指针。
所以我的问题是,首先,在编写目标 c 代码时是否禁止这种传递参数的方式?如果不是,那么以这种方式创建的对象如何被释放?最后,这段代码会导致内存泄漏吗?
仅作记录,我理解上面的代码是写的
NSString *string = [[NSString alloc] initWithFormat:@"Hello World!"];
[someObject someMethod:string];
// [string release]; depending on ARC or non-ARC