Objective-C中的隐式对象指针

Objective-C中的隐式对象指针,object,pointers,scope,objective-c-2.0,Object,Pointers,Scope,Objective C 2.0,我正在用苹果公司的Objective-C编程指南自学Objective-C2.0 关于我认为隐式创建的指针,我有一个问题 如果要重写示例代码: @implementation XYZShoutingPerson - (void)saySomething:(NSString *)greeting { NSString *uppercaseGreeting = [greeting uppercaseString]; [super saySomething:uppercaseGreet

我正在用苹果公司的Objective-C编程指南自学Objective-C2.0

关于我认为隐式创建的指针,我有一个问题

如果要重写示例代码:

@implementation XYZShoutingPerson
- (void)saySomething:(NSString *)greeting {
    NSString *uppercaseGreeting = [greeting uppercaseString];
    [super saySomething:uppercaseGreeting];
}
@end
作为

我是否会收到一个隐式创建的指向新NSString对象的指针?如果是,指针的作用域是什么


一种方法比另一种方法好吗?

重写的代码基本上与原始代码相同。是,您将从
[问候语大写字符串]
收到一个指针。我想我们可以说它的范围是saySomething方法。uppercaseString返回的字符串的保留计数为1,并将自动删除。在原始代码和您的版本中,除非
[super saySomething:][/code>保留其参数(这不太可能),否则uppercaseString的结果将被释放,然后在弹出自动释放池堆栈的当前帧时释放。出于实际目的(除非您正在管理自己的自动释放池),这意味着uppercaseString的结果将在事件循环的当前回合结束时释放

编译器可能足够聪明(特别是在使用ARC的情况下),只要
[super saySomething:][/code>返回,就可以取消分配大写字符串的结果。同样,这在两个版本的代码中都是相同的,原因是在
[super saySomething:][code>返回后不使用uppercaseString的结果

@implementation XYZShoutingPerson
- (void)saySomething:(NSString *)greeting {
    [super saySomething:[greeting uppercaseString]];
}
@end