【发布时间】:2009-08-28 15:12:22
【问题描述】:
这个问题是上一个问题的后续问题,该问题引发了进一步的问题。我想了解的是这个例子中的指针和对象是什么时候被创建的,以及它们最终会发生什么。我仍在努力解决这个问题,所以请原谅我可能做出的任何错误假设。
// MAIN
int main (int argc, const char * argv[]) {
PlanetClass *newPlanet_01 = [[PlanetClass alloc] init];
[newPlanet_01 setGeekName:@"StarWars"];
}
.
// CLASS
@interface PlanetClass : NSObject {
NSString *geekName;
}
- (NSString*) geekName;
- (void) setGeekName:(NSString*)gName;
@end
.
// SETTER
- (void)setGeekName:(NSString *)gName {
if (geekName != gName) {
[geekName release];
geekName = [gName copy];
}
}
(A) ... 当第一次创建 PlanetClass "newPlanet_01" 的实例时,是创建了 NSString 实例变量对象,还是只是指向可能的未来对象的指针?如果它只是一个指针,我稍后会在 setter 中释放什么,因为它只是一个指针,而不是指向对象的指针?
(B) ...在上面的例子中,“gName”是一个指向NSString对象@"StarWars"的指针?
(C) ... 接下来是与 gName 不同的指针 geekName(即如果 geekName 尚未指向 @"StarWars")
(D) ... geekName release,代码第一次运行时释放什么,我的理解是geekName只是一个指针,不指向任何东西。还是第一次发布只是不发布任何东西?
(E) ... 最后 geekName = [gName copy];新发布的 geekName 现在被指定为指向 gName 的副本,那么原始 gName 会发生什么?
【问题讨论】:
标签: objective-c xcode memory nsstring