Objective c 释放对象后是否使用该对象?

Objective c 释放对象后是否使用该对象?,objective-c,cocoa,Objective C,Cocoa,我正在学习Aaron Hillegrass为MacOS X编写的Cocoa程序,但我有点不明白。在第150-151页,他创建一个对象,释放它,然后再次使用它。例如: - (void) someMethod { NSMutableArray *array = [[NSMutableArray alloc] init]; NSString *str = [[NSString alloc] initWithString:"This is a string."]; [array

我正在学习Aaron Hillegrass为MacOS X编写的Cocoa程序,但我有点不明白。在第150-151页,他创建一个对象,释放它,然后再次使用它。例如:

- (void) someMethod
{
    NSMutableArray *array = [[NSMutableArray alloc] init];
    NSString *str = [[NSString alloc] initWithString:"This is a string."];
    [array addObject:str];
    [str release];
    int x = [array indexOfObjectIdenticalTo:str];
    NSLog(@"the index of %@ in the array is %d", str, x);
}

如果对象已被释放,这将如何工作?对象是否仍然有效,直到方法完成或设置为
nil

将其添加到数组将增加引用计数,因此显式释放将保留引用计数为1。这不是一个好的做法(在引用完某个内容之前不应该发布它),但在这种情况下是安全的。

谢谢。这就是我所需要的全部解释。我不同意你说这是“不好的做法”的说法。如果一个对象包含数量可变的其他对象,那么将它们存储在一个数组中是保留所有对象的一种简单而明显的方法。实际上,最好设置一个示例,在使用完变量后才释放它。循环应该是获取->使用->放弃,依靠内部处理来验证获取->放弃->使用,因为我们知道它还没有真正被删除,这是一个坏主意,特别是当与仍在学习基本规则的人交谈时。我同意你的评论,多维先生。你已经清楚地勾勒出我困惑的根源。但我也可能没有被提示问这个问题,如果发布是在函数的末尾。也许这本书假设对Objective-C有点太熟悉了。它肯定不是“假设对Objective-C有点太熟悉”,因为引用计数是一个Cocoa特性。如果读者不明白将一个对象放入一个数组将如何保留它,那么他们显然对他们当前的技能水平来说太过深入,应该再次回到内存管理部分。