2009-08-14 2 views
0

나는 질문이 ... 나는 그가 MyDocument.m 파일Objective-C 코드 설명?

employees a; 

할을 줄을 무엇

를 쓰고 8 1 부, 맥 OSX에 대한 장에서 코코아 프로그래밍을 읽고 있어요했다 ?

employees = [[NSMutableArray alloc] init]; 

직원이 변경 가능한 배열 즉, 위의,하지만 난

employees a; 

이 무엇 확실하지 않다.

나는 추측을하고 있지만, 인수 a가 이미 직원의 내용과 동일한 지 확인하기 위해 코드가 확인하는 것처럼 보입니다. 그렇다면 기능을 종료하고 그렇지 않으면 직원을 할당 해제하고 직원을 a와 동일하게 설정합니다.

미리 도움을 주셔서 감사합니다!

답변

5

제 3 판 127 페이지를보고 있다고 생각합니다. 초기화 기능에

는 종업원 어레이는 초기화된다

employees = [[NSMutableArray alloc] init]; 

이것은 다음 가변 배열을 생성하고 그것을 지적하는 직원 변수를 설정한다.

난 당신이 다음 접근 기능에 대해 물어 생각이 이후 당신이 KVC의 방법으로 직원 배열을 변경할 때마다 호출되는 함수입니다

-(void)setEmployees:(NSMutableArray *)a 
{ 
    if (a == employees) 
     return; 

    [a retain]; 
    [employees release]; 
    employees = a; 
} 

; 이것은 전달 된 NSMutable 배열이 이미 생성 되었기 때문에 초기화 코드와 다르게 보입니다.

먼저 함수는 현재 직원 배열과 동일한 배열인지 확인하고, 변경해야 할 필요가 없으면 함수가 반환됩니다.

그런 다음 전달 된 배열은 유지되고 기존 배열은 해제됩니다. 그런 다음 employees 배열은 새로운 배열 a을 가리 키도록 설정됩니다. 메모리를 누출시키지 않도록 현재 배열을 새 배열로 설정하기 전에 현재 직원 배열을 해제하는 것이 중요합니다.

희망이 도움이됩니다.

2

잘못되었습니다. Objective-C에는 이와 같이 할당 된 객체에 대한 개념이 없으므로 포인터와 alloc으로 모든 것을해야한다.

NSMutableArray *employees; // don't forget the * 
employees = [[NSMutableArray alloc] init]; // allocation + constructor call 

그러나 책이있는 NSMutableArray에 대한 포인터로 직원을 정의하는 경우, 그것은 잘 될 수 있습니다 : 그것은해야

typedef NSMutableArray *employees; 
employees a; 
a = [[NSMutableArray alloc] init]; // it's "a", not "employees" here 

라인 "직원들 a" typedef를 사용할 수는 있지만 두 경우 모두 다음 줄이 잘못되었습니다. 유형에 값을 할당 할 수 없습니다.

+0

나의 나쁜 것은 실제로 직원 = a. – hahuang65

+0

@ hahuang65 - 이것을 반영하기 위해 질문을 편집 할 수 있습니다. – Abizern