Этот вопрос следует из предыдущего вопроса, который поднял еще одну проблему. Я пытаюсь понять, когда именно создаются указатели и объект в этом примере, и что в конечном итоге происходит с ними. Я все еще пытаюсь обдумать это, поэтому, пожалуйста, извините за любые ложные предположения, которые я, возможно, сделал.
// 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 или просто указатель на возможный будущий объект? Если это просто указатель, что я высвобождаю позже в установщике, так как это просто указатель, а не указатель на объект?
(B) ... В приведенном выше примере "gName" является указателем на объект NSString @ "StarWars"?
(C) ... Далее указатель geekName отличается от gName (т. Е. Если geekName еще не указывает на @ "StarWars")
(D) ... выпуск geekName, то, что выпускается при первом запуске кода, я понимаю, что geekName - это просто указатель, на который ничего не указывает. Или выпуск просто не выпускает ничего в первый раз?
(E) ... Наконец, geekName = [копия gName]; недавно выпущенному geekName теперь назначено указывать на копию gName, что происходит с исходным gName?