[App 개발] Chapter 6의 6쪽에서 copy에 대한 질문..
본문
- (void)setPersonName:(NSString *)aName
{
aName = [aName copy];
[personName release];
personName = aName;
}
........
여기서 사람 이름을 설정할 수 있는데
copy 메소드는 객체를 복사하는 것이 아닌가요?
헌데 매개변수에 매개변수에 대한 사본을 대입하는데
왜 이렇게 해야 되는지 모르겠어요.
그냥 personName 에 대입해도 될 듯한데
그렇게 하면 이상하게 오류가...
최신글이 없습니다.
최신글이 없습니다.
댓글목록 4
hongjuny님의 댓글
일단은 copy 메쏘드가 무엇인고 하는 내용이 소스코드 바로 밑에 설명되어 있을 거예요. immutable string 을 만드는 것이라고 나와 있지요?
그런데, 어떤 에러가 나던가요?
프린이님의 댓글
aName = [aName copy] 를 지운 상태에서 컴파일을 하고 프로그램 실행 상태에서 사람 이름을 바꾸었는데 프로그램이 멈춰지고 디버깅 창이 떠서...
프린이님의 댓글
변하지 않는 문자열을 만드는 것은 알겠는데 그냥 인수만 받아서 personName 에 대입만 하면 끝인데 왜 매개변수를 변하지 않는 문자열을 만들어야 하는지 궁금해요.
hongjuny님의 댓글
시간이 있었으니 다른 자료등을 찾아보았을 것이라고 생각되는데... copy method 에 대해서 조금 더 깊이 살펴보았다면 reference count 라는 것도 학습했겠지요?
저기서 aName 이라는 객체가 계속 retain 되는 객체인지, 아니면 중간에 사라져 버릴 객체인지 아무도 모르는 상황에서 그냥 personName = aName 으로 넙죽 대입했을 때의 reference count 가 어떻게 될까요?
이럴 때에는 aName 을 copy 메쏘드를 이용해서 reference count 1 의 immutable string 을 만들어서 우리 객체에 담아두어야 안전하지, 그렇지 않으면 외부에서 이 객체가 변경 혹은 terminate 되었을 때 덩달아서 personName 객체도 망가지는 것을 막을 수가 있어요. 디버거로 한 번 쫓아가서 살펴보면 아마도 저기 personName 이 NULL 로 변해있거나 할 거예요.