dngchn's [iOS]2014. 11. 11. 08:27

NSObject는 Objective-C의 최상위 클래스 임.

최상위 클래스 이므로 부모 클래스가 없음.

+ 로 시작하는 Class Method

- 로 시작하는 Instance Method

 

NSObject * object = [NSObject alloc];


NSObject의 클래스 메서드인 alloc를 호출하여 그 리턴 값을 object라는 변수에 넘겨 줌(저장함)

alloc의 역할: 새로운 인스턴스 객체를 만들어(메모리 할당) 그 객체의 주소를 리턴 함.

 

모든 클래스는 NSObject를 부모로 섬김으로(NSObject를 상속하므로) alloc 메서드는 어느 클래스에나 존재함.

 

NSArray * array = [NSArray alloc];
[array init];


init는 인스턴스 메서드 임.

init의 역할: 객체의 초기화를 담당. 성공하면 자신의 주소를 리턴, 실패하면 자신을 해제 한 후 nil을 리턴.

그러므로 위의 코드는 엄밀히 보면 init 실패 시 array는 의미없는 주소를 갖게 됨.


NSArray * array = [NSArray alloc];
array = [array init];


또는


NSArray * array = [[NSArray alloc] init];


이렇게 바꿔야 함.

위와 같이 생성 후 사용이 끝나면 해제 해야 함.


[array release];


'dngchn's [iOS]' 카테고리의 다른 글

[내가쓰는강좌 1] Objective-C, 메모리 관리  (0) 2014.11.07
Posted by dngchn
dngchn's [iOS]2014. 11. 7. 18:18

일반적인 언어들의 메모리 관리 타입 3가지

1. C/C++

포인터 개념으로 모든 메모리 관리(할당 및 회수)를 직접 한다(코드레벨에서 관리 함수를 제공하여 그 권한과 책임을 개발자에게 줌).

장점: 세부적인 메모리 관리가 가능

단점: 잘 못하면 메모리 누수 등 문제 발생 함. 개발자 부담이 큼.

 

2. Java/C#

가비지 콜렉터 개념으로 별도의 메모리 관리 함수를 제공하는 것이 아니라 시스템 상에서 사용 안하는 메모리를 자동으로 제거해 주는 개념임. 개발자가 할일은 없음.

장점: 개발자가 메모리 관리에 신경 쓰지 않아도 됨.

단점: 모바일 환경에서는 성능상 좋을게 없음(느림).

 

3. Objective-C

Retain Count 개념으로 언어적으로 retain count를 관리하는 메서드를 제공하여 사용 안하는 메모리가 일종의 가비지 컬렉터에 의해 회수 되는 개념임.

장단점: 1번과 2번의 중간적인 개념이어서, 개발자의 부담은 1번 보다는 줄지만, 객체 사용 후 뒤처리를 해줘야 해서 2번 보다는 신경쓸 일은 있음. 2번 보다는 성능상 좋음.

Posted by dngchn