Recent Post»

Recent Comment»

« 2024/12 »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
12-25 13:14

 
 

Objective-C의 id type 과 inheritance 에 대하여

iPhone | 2010. 4. 6. 18:19 | Posted by 짱아
반응형
    ◆ The id types

    • void* 와 같은 역할을 하는 Objective-C의 type
    • 오브젝트의 메소드를 호출할 때 타입을 알 필요가 없음.
    • 타입은 메시지 파싱(message parsing)에 맡김
    • dynamic binding의 명백한 장점
    • id 타입으로 선언한 변수에 대해서는 어떠한 메소드 호출도 기술 가능
      =
      > id 타입변수는 모든 메소드를 호출할 수는 있다. 호출 할 수 없는, 또는 선언되지 않은 메소드 호출시 경고
    • id 타입으로 선언한 변수와 클래스명을 타입으로 선언한 변수(클래스의 객체변수?)간 상호 대입이 가능
      => id타입변수에 클래스 객체를 대입할 수 있다. 골치 아픈 캐스팅 문제에 대해서 고민하지 않아도 된다.
    • 클래스명을 타입으로 사용해서 변수 선언을 하면, 그 클래스가 대응할 수 있는 것 외에 메소드 호출에 대해 경고 나옴.
      =>클래스객체를 id타입변수로 이용하고 있는데, 클래스에 선언되지 않은 메소드를 호출하면 경고가 발생함.
    • 클래스명을 타입으로 사용한 변수에 그 클래스의 서브클래스(상속받은 하위 클래스)를 타입으로 하는 변수를 대입할 수 있음.
    • 클래스명을 타입으로 사용한 변수에 그 클래서의 슈퍼클래스를 타입으로 하는 변수를 대입하지 못함. 
    • 프로그램 코드 상의 선언에 관계없이 런타임에서 실제로 변수에 들어있는 객체의 메소드가 실행됨.(dynamic binding?)
    • id 타입은 (NSObject*) 타입이 아님.
    • nil은 NULL 오브젝트 포인터. 이때 id의 값은 '0'임 (id)0
    • NIL은 NULL 클래스 포인터. (Class)0
    • 'id', 'nil' 등과 같은 기본적인 타입정의는 헤더파일 'objc.h'(~/Library/Headers/obj에 위치)에 정의 되어 있음.


    ◆ Inheritance

    • 한개의 클래스에서만 상속할 수 있음.
    • overriding(재정의) 가능
    • id를 이용한 상속간의 문제 해결
      //1)SuperClass 정의
      @interface Aclass : NSObject { ... }
      -(Aclass*) initA; //Aclass의 생성자
      @end

      //2)SubClass 정의 (Aclass 상속)
      @interfce Bclass : Aclass {...}
      -(Bclass*) initB;

      //3)Bclass 객체에서 Aclass의 생성자(initA)를 사용하려는 경우. 컴파일 오류 발생
      ...
      Bclass *objB = [[Bclass alloc] initA]; 
      ....
      위의 3)의 코드에서 initA에서 리턴하는 값이 Bclass*가 아닌 Aclass*이기 때문에 오류가 발생한다.
      오류내용은 'initialization from distinct Objective-C type' 과 같은 내용임.
      해결방법은 id type을 이용하여 SuperClass 생성자의 리턴값을 변경해 주면 됨

      //아래와 같이 SuperClass 수정
      -(id) initA;

※ 본 내용은 Objective-C에 대한 개인적인 개발 경험을 돕기 위한 기록이므로 잘못된 정보가 포함되어 있을 수 있습니다.

반응형
:
반응형
Windows를 이용자이면서 iPhone 개발을 공부하고자 하는 경우, 먼저 iPhone SDK의 기본이 Objective-C를 공부해야 할 것이다. Objective-C를 OSx 환경이 아닌 windows환경에서 다음과 같은 GNUstep과 Dev-C++를 설치해 줌으로써, 간단하게 개발환경을 구축할 수 있다.


# GNUstep 과 DEV-C++ 설치하기


  1. GNUstep System (0.24.0) 다운로드 & 설치  : http://www.gnustep.org/experience/Windows.html


  2. GNUstep Core (0.23.1) 다운로드 & 설치http://www.gnustep.org/experience/Windows.html


  3. Dev-C++ 다운로드 & 설치http://sourceforge.net/projects/dev-cpp/files/Binaries/Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_setup.exe/download


  4. Dev-C++ 컴파일러 설정하기

      1) 컴파일러 추가 명령 : -lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import


      2) 링커 추가 명령 : -lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import


      3) 실행 파일에 추가

          C:\GNUstep\mingw\bin

          C:\GNUstep\bin

      4) 라이브러리에 추가
          C:\GNUstep\mingw\lib
          C:\GNUstep\GNUstep\System\Library\Libraries

      5) 인클루드에 추가
          C:\GNUstep\mingw\include
          C:\GNUstep\GNUstep\System\Library\Headers


대부분의 설치과정이 디폴드 설정으로 설치를 진행하면 된다. 마지막 4번에 있는 컴파일러 설정 부분만 신경써서 진행해주면 Objective-C로 "Hello World!"를 출력해 볼 수 있을 것이다.



※ 본 내용은 Objective-C에 대한 개인적인 개발 경험을 돕기 위한 기록이므로 잘못된 정보가 포함되어 있을 수 있습니다.






반응형
:

아이폰 화면 캡처하기 (iPhone Screen Capture)

iPhone | 2010. 2. 5. 13:49 | Posted by 짱아
반응형
아이폰은 화면 전체를 캡처하는 기능을 제공하고 있다.

홈 단추 + 잠자기/깨우기 버튼을 동시에 눌러주면 캡처된 화면이 사진 디렉토리에 저장된다.


반응형
: