지금까지 다루어 본 배열, 구조체, 문자 스트링 상수, 공용체 이들은 객체가 아니다.
또한 Foundation프레임 워크에서 제공하는 기능, 특히 메모리 할당과 같은 기능을 사용할 수 없다.
이는 메모리 활용 및 관리가 어렵다는 것이다.
############### 오브젝티브 C가 동작하는 방식 ###############
1) 인스턴스 변수는 구조체에 저장된다.
- 새 클래스와 그에 속한 인스턴스 변수를 정의하면 이 변수 들은 구조체에 저장된다.
- 객체는 인스턴스변수로 구성된 구조체이다.
- alloc으로 새 객체를 생성하면 구조체로 메모리 공간에 예약된다.
2) 객체는 포인터이다.
- Fraction * myFraction 과 같이 객체는 포인터이다.
- myFraction = [Fraction alloc]; 으로 Fraction클래스(구조체)를 리턴받아 myFraction에 할당한다.(객체 생성)
- 할당받은 myFraction은 Fraction의 복사체이다.
- 즉 원본과 별개의 메모리공간을 가지고 있으므로 원본 및 같은 것을 변수로 담고있는 것 들과 충돌이 나지 않는다.
3) 메서드는 함수이다. 메시지 표현식( [myFraction add] )은 함수 호출이다.
- 오브젝티브C는 구조가 남다르기 때문에 메서드와 함수의 형태가 뚜렷하지만 이 둘은 같은 구조를 갖는 함수이다.
- 예) 프로그램에서 함수는 일반적인 함수의 형태를 갖고있다. 그러나 .m 에서의 메서드는 일반적인 함수와 형태가 다르지만 함수이다.
- 메시지 표현식은 함수호출이다. 마찬가지로 다른 언어와 달리 함수 호출의 형태가 독특하며 명칭또한 다르다(메시지 표현) 그러나 함수호출과 같은 기능이다.
4) id객체는 포인터이다.
- id객체는 포인터이므로 데이터 타입이나 객체 등 자유롭게 할당할 수 있다.
5) 모든 객체에는 꼬리표가 있다
- 모든 객체는 루트에서 상속받은 potected로 정의된 isa 멤버(4바이트)를 갖는다. 사실상 이것을 통해 객체를 분류하고 식별한다.