[출처: http://maclove.pe.kr/32]

메모리 관리

많은 개발자들이 Objective-C 의 메모리 관리를 어렵게 느낀다. Objective-C 에서 객체는 참조 카운터를 이용해서 관리되기 때문에, 참조 카운터를 증가 시키고 감소하는 작업이 프로그래머의 몫이 된다. 여기서 혼돈이 오는 것이다. 참조 카운터를 증가시키는 함수는 retain 이다. 반대로 참조 카운터를 감소시키는 함수는 release와 autorelease 이다. 하지만 문제는 이미 만들어진 객체의 메서드가 내부에서 retain 을 몇번 부르는지를 별도로 알아낼 방법이 없다는 것이다. 다음을 보자.

UIImageView* imgView = [[UIImageView alloc] init];

이 코드에서 UIImageView 는 retain 내부에서 한번 호출해서 객체를 반환해 준다. 그렇기 때문에 우리는 더이상 필요하지 않을때,

[imgView release];

를 호출해야 한다. 하지만 다음을 보자.

NSString* output = [NSString stringWithFormat:@”My name : %@”, name];

이 코드는 NSString의 stringWithFormat 클래스 메서드를 이용해서 객체를 생성하는 코드이다. 이 녀석은 retain 이 아닌 autorelease 를 호출해서 객체를 반환한다. 이렇게 어떤 메서드는 객체를 retain 해서 반환하고, 또 어떤 객체는 autorelease 로 반환하기 때문에 혼돈이 온다.

참조 카운트를 관리하는 함수는 다음과 같다.

• retain
     - 참조 카운트를 1 증가 시킨다.
• release
     - 참조 카운트를 1 감소시킨다. 참조 카운트가 0이 되면 메모리가 해제된다.
• autorelease
     -  객체를 오토릴리즈 풀에 등록한다. 나중에 오토릴리즈 풀이 제거될때 release 를 호출해 준다.

객체의 참조를 관리하는 것은 위 3개의 메서드가 전부이지만, 문제는 클래스 내부 구현에서 위 함수들을 호출하는 지를 모른다는 점이다. 하지만 법칙이 있다. 애플이 작성한 모든 클래스는 정해진 규칙을 철저하게 따르기 때문에 이 법칙들만 알아두면 더 이상 햇갈릴 일이 없다.

* 규칙1 : alloc, copy, new를 이름에 포함하는 메서드는 retain 된 객체를 반환한다.

alloc, copy, new 가 메서드 이름에 포함되어 있다면, 그 때 반환되는 객체는 retain 되어 있다. 그래서 반드시 release 를 직접 호출해야 한다.

01: queue = [[NSOperationQueue alloc] init];
02: // 작업
03: [queue release];
04:
05: copyedObj = [name copy];
06: // 작업
07: [copyedObj release];

* 규칙2 : 결자해지

만약 자신이 retain 을 호출했다면, 책임지고 release 또는 autorelease 를 호출해 주자.

01: [objA retain];
02: // 작업
03: [objA release];

반드시 자신이 호출한 retain 에 대해서 release/autorelease 짝을 맞추도록 하자.

* 규칙3: 클래스 메서드가 객체를 생성해 줄때는 autorelease 객체를 반환한다.

클래스 메서드로 객체를 생성하는 경우 즉 stringWithFormat 과 같은 클래스 메서드가 반환하는 객체는 모두 autorelease 객체이다.

01: img = [UIImage imageNamed:@"test.png"];
02: imgView = [[UIImageView alloc] initWithImage:];
03: // 작업
04: [imgView release];

코드 1행의 imageNamed 메서드 처럼 클래스 메서드를 이용해서 객체를 생성하는 경우 그 객체는 autorelease 가 호출된 객체이다. 그렇기 때문에 별도로 release 를 호출하지 않아도 오토릴리즈 풀이 자동으로 release 를 호출해 준다. 하지만 이 객체에 retain 을 호출 했다면 호출한 만큼의 release 를 호출 해야한다.

* 규칙4: 포함 객체는 추가된 객체를 retain 하고, 항목을 제거할 때 release 한다.

NSArray,NSDictionay 등의 포함 객체는 항목으로 추가되는 객체에 대해서 retain 을 한번 호출한다. 그리고 객체가 포함객체에서 제거될때 release 를 호출해 준다.

13.9.5 규칙5: retain 속성을 갖는 접근자

프로퍼티를 구성할때 @property (retain) ... 과 같이 retain 속성을 지정하면 이 프로퍼티에 객체를 설정하면 retain 메서드를 호출한다.

01: myImage = [[UIImage alloc] init]; // myImage 에 retain –> 1
02: self.userImage = myImage; // myImage 에 retain –> 2
03: [myImage release]; // myImage 에 release –> 1
04: // ...
05: self.userImage = myImage2; // 예전 myImage 에 release -> 0 해제

이와 같이 객체를 설정하는 접근자는 일반적으로 그 객체에 대해서 retain 을 호출한다. 그리고 만약 다른 객체를 재설정하면, 예전 객체에 release 를 호출한다. 위 예제의 3행에서 release 를 호출한 이유를 이해할 것이다.

*규칙5: 메서드가 반환하는 객체는 autorelease

메서드가 객체를 반환한다면 autorelease 된 객체를 반환하는 것이 좋다.

01: -(NSString*) findTopPlayer {
02: NSString *ret = [[top objectAtIndex:0] copy];
03: [ret autorelease];
04: return ret;
05: }

[출처: http://maclove.pe.kr/32]



출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150059860682
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 22. 19:58
[펌] iPhone 어플리케이션 아이콘 설정
맥과는 달리 아이폰에서는 아이콘 파일(*.icns)을 사용하지 않고, 57X57 사이즈의 PNG 파일 포맷을 사용하는 것 같습니다.






재미있는 것은 좌측이 원본 아이콘 이미지이고 우측이 아이폰의 홈스크린에서 보여지는 모습입니다. 시스템에서 자동으로 아이콘의 모서리를 둥글게 보여주고 명함 효과를 주기 때문에 이미지에서 별도의 작업이 필요 없습니다.


만약 이미지에 배경이 없고 투명색으로 처리되었을 경우에는 좌측과 같이 검정색 배경의 아이폰 아이콘의 형식으로 출력이 됩니다.




* 아이콘 파일 등록
아이콘 파일은 메뉴의'Project/Add to Project...'나 Groups & Files에서 해당 디렉토리를 우클릭 한 후에 아래와'같이 Add/Exsiting Files...'를 클릭하여 해당 파일을 선택하시면 됩니다.



* 아이콘 파일 지정
사용자가 지정하지 않으면 실행파일 번들내의 Icon.png를 기본 아이콘 파일로 인식합니다. 별도로 아이콘 파일을 지정할 경우에는Info.plist 또는 아래와 같이 타겟의 Info Properties의 'Icon File:' 항목에서 png 확장자를제외한 파일명을 입력합니다. 



출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150055162184
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 13. 14:27
아이폰 개발에서 iphone Device 테스트 순서 완벽 정리

원문 : http://tory45.egloos.com/5230002

iPhone 개발자 등록 및 라이센스를 받았다면 이제 간단한 App를 만들어 에물레이트와 iPhoneDevice( iPhone 3GS, iPod )에 올려서 테스트 해보자..

iPhone App를 테스트 하는 방법에는 크게 iPhone SDK 시뮬레이트와 실제 장치인 iPhone이나 iPod에서 테스트 하는 방법이 있다 
iPhone SDK 시뮬레이트 데스트는 큰 제약사항없이 사용할수 있지만(무료) 실제 장치에서 테스트를 하기 위해서는 반드시 라이센스( 유료 )를 받아야 한다...

라이센스를 받게 되면 라이센스를 받을 때 등록한 등록자가 최고 레벨인 "Agent" 레벨을 받게 된다.


Agent는 Team이 존재할경우 Team별 "Team Admin", "Team Member"을 초청, 허락 할수 있고 "Team Admin"은 자신의 "Team Member"를 초청, 허락 할수 있다.

Team이 없을 경우 Admin과 Member를 초청, 허락할수 있고 1명의 개발자만 존재할 경우 Admin이나 Member를 별도로 구성할 필요는 없이 Agent로 모든것을 처리 할수 있다 

단, 구성하고자하는 Admin 과 Member는 iPhone 개발자로 등록되어 있어야 한다. 

메일 남기시면 iphone_developer_program_user_guide( pdf )문서 보내 드리겠습니다. 


Agent 역할 : 
     iPhone Distribute Certification 획득 
     Digital Certificates 요청
     Admin 또는 Member를 초청 , 허락
     테스트 Device 등록
     App ID 생성
     Provisioning Profile 생성
     Push Notification service 사용
     SSL Certification 생성

Admin 역할 :
     새로운 Admin 초청
     Digital Certificates 요청
     Member 초청, 허락
     테스트 Device 등록
     Provisioning Profile 생성


Member 역할
     Digital Certificates 요청
     Provisioning Profile 다운로드


이렇게 팀 구성이 완료 되면 
     1. iPhone Development Certificate 요청 및 인가   : 권한 ( Admin, Agent, Member )
     2. iPhone Device 등록(지정)                             : 권한 ( Admin, Agent )
     3. 개발(테스트) 프로그램에 대한 App ID 생성       : 권한 ( Admin, Agent )
     4. Development Provisioning Profile 생성 및 다운로드 : 권한 ( Admin, Agent, Member )
     5. Xcode에 Provisioning Profile 적용                  : 권한 ( Admin, Agent, Member )
     
순으로 진행해야 한다.


1. iPhone Development Certificate 요청 및 인가


개발 PC(Mac)에 대해 개인용 인증 Key를 생성하고 생성된 Key에 대해 Agent나 Admin에게 인가를 획득하는 단계
Application folder --> Utilities--> KeyChain Access 실행       
KeyChain Access --> Certificate Assistant --> Request a Certificate From a Certificate Authority 클릭

   - Saved to disk 에 체크
  
  - 2048bite 선택
  - RSA 선택 후 Continue를 클릭하게 되면 바탕하면에 인증요청서( CSR File )가 만들어진다

요청자의 id로 http://developer.apple.com/에 접속하여 오른쪽 상단 "iPhone Developer Program Portal"로 들어가
Certificates->Development의 "Request Certificate" 버튼을 누른다
   

 왼쪽 하단의 "ChooseFile"을 선택해서 바탕화면에 저장된 인증요청서를 선택하고 "Submit"을 누르면
 자신의 Admin으로 인증요청 안내 메일이 발송된다. 
   

요청을 받은 Admin이 http://developer.apple.com/에 Admin 계정으로 접속하여 "iPhone Developer Program Portal"로 들어가
Certificates->Development으로 가서 요청한 인증서에 대해 "Approved"나 "Rejected"를 선택한다   

 
Admin이 요청한 인증서에 대해 "Approved"나 "Rejected"를 하게 되면 요청자는 위 페이지에서 인증서를 다운로드 받을 수  있다. 


 다운로드 된 인증서 파일을 더블 클릭하게 되면 Keychain Access프로그램에 의해 자동으로 설치 된다. 

2. iPhone Device 등록(지정)
Admin이나 Agent는 테스트 할 iPhone Device를 등록해야 하는데 iPhone Device를 PC에 꽂는 순간 iTuns와 Xcode의 Organizer가 인식하는데 만약 iTuns가 실행중이면 iThus를 종료하고 Xcode의 Organizer에서 처리 하도록 하자 

Xcode->Window->Organizer 클릭해서 idenfier를 복사 한다 


다시 Admin 또는 Agent는  http://developer.apple.com/로 접속하여 "Device"메뉴로 들어가 "Add Device"를 클릭하여
간단한 Device 설명과 함께 Organizer에서 복사한 identifier를 복사한 뒤 "submit"를 클릭한다 

등록된 Device는 아래와 같이 표시된다.


3. 개발(테스트) 프로그램에 대한 App ID 생성
   - 간단한 Sample 프로그램을 xcode에서 하나 만든다. 여기서는 "Sample"라는 프로제트를 만들었다고 과정을 한다
Admin 또는 Agent는  http://developer.apple.com/로 접속하여 "App IDs" 메뉴로 이동하여 "New App ID"를 클릭한다.
간단한 App 정보를 입력하고 App ID를 입력한뒤 Submit을 요청한다. 

여기서 주의할것은 App ID를 만들 때  iPhone이 권장하는 포맷으로  입력해야하는데 여기서는 "com.enustech.sample"이라는 
Explicit App IDs 포맷으로 생성하도록 했다. Wildcard App IDs 포맷은 직접 Searching 해 보기 바란다. 

등록된 AppID는 아래와 같이 표시 된다
4. Development Provisioning Profile 생성 및 다운로드
   - 이제 Device도 등록했고 AppID도 등록했으니 실제 Xcode의 Sample 프로젝트에 등록할 Provisioning Profile 을 생성해 보자 
역시 Admin이나 Agent는 Admin 또는 Agent는  http://developer.apple.com/로 접속하여 "Provisioning" 메뉴로 들어가 "New Profile"를 선택한다 

간단한 Provisioning 설명을 적고 사용할 AppID를 선택하고 사용할 Device를 선택한다. 
생성된 Provisioning Profile는 아래와 같이 표시된다 

Sample 프로젝트를 테스트 하기 위해 Sample Provisoning Profile을 "다운로드" 버튼을 클릭하여 다운로드 하자..KeyAccess 프로그램이 자동으로 보관하게 될것이다 

5. Xcode에 Provisioning Profile 적용
Xcode에서 iPhoe Device로 직접 테스트 하기 위해서는 "Set Active SDK"를 아이폰 시뮬레이터에서 iPhone Deivce로 변경해주어야 한다.

그리고 Xcode Sample프로젝트에서 Target 아래의 Sample에 마우스를 데고 오르쪽 버튼을 눌러 Get Info 또는 Command + I를 눌러 "Properties" 메뉴를 클리하자 
identifier에서 "com.yourcompany."을  이전에 등록한 "AppID"인 "com.enustech.sample."으로 변경하자 


정보보기 Tab의 "Build"로 이동하여 "Code Signing" 센션을 보면 Code Signing Identity 의 Any iPhone OS Device 부분이 애플리케이션 인식자가 정상적으로 설정되어 있다면 아래와 같이 보이면 된다. 

Active SDK가 iPhone Device로 선택되어 있는지 확인하고 Build and Go를 해보자...

이제 iPhone에서 남은건 해킹이다...

iPhone 개발자 등록 및 iPhone 개발자 라이센스 획득 절차 강좌 바로 가기
iPhone Sim Unlock & iPhone jailbreak 강좌 바로가기



출처 : http://blog.naver.com/PostView.nhn?blogId=74hans&logNo=109929101
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 11. 17:36
iPhone 어플리케이션 실행 구조

어플리케이션이 처음 실행되고 부터 종료될 때 까지의 흐름을 살펴보도록 하겠다.
맥이나 윈도우 모두 그래픽 기반의 운영체제이다. 그래픽 기반의 운영체제에서

어플리케이션을 구현시키는 가장 좋은 방식은 이벤트 드리븐(Event driven)이다.

이벤트는 사용자가 마우스나 키보드를 누르는 것부터 특정 시간이 지났다는 이벤트,

네트워크로 데이터를 받았다는 이벤트 등등 모든 것이 해당할 수 있다.  놀랍게도 세계에서

가장 발전한 상용 GUI OS들인 맥 OS , MS의 윈도우즈 들의 아름다운 UI 밑에는 가장 기본적인

뼈대 Main Loop이 버티고 있다. 사실 컴퓨터 소프트웨어가 하는 일은 최초의 컴퓨터가 발명된 때와 별반 다르지 않다. 그 위에 수만 겹의 추상화가 지금의 컴퓨팅 환경을 만들어 놓았지만,

그 뼈대는 변하지 않은 것이다. 컴퓨터는 여전히 0 과 1밖에 모르는 바보다. 크게 어렵지

않으니 하나하나 익혀나가면서 정복해 보자.

* 처음 시작

사용자가 스프링 보드에 있는 어플리케이션의 아이콘을 누르면 어플리케이션이 실행된다.

다음 코드를 보자.

1.int main(int argc, char *argv[]) {
2.    
3.    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
4.    int retVal = UIApplicationMain(argc, argv, nil, nil);
5.    [pool release];
6.    return retVal;
7.}



Xcode 에서 자동으로 생성해 주는 코드이다. 기존의 C 함수와 마찬가지로 아이폰OS 에서

실행되는 프로그램들도 시작점은 메인 함수 이다. 메인 함수는 가장 먼저 자동해제 풀을

하나 할당한다. 자동해제 풀이란 메모리를 자동 릴리즈 하겠다고 설정한 객체들을 임시로

보관해 두었다가 적절한 시점에 해제시키기 위한 저장공간 정도로 이해하고 넘어가자.

다음 코드는 UIApplicationMain 함수를 실행시킨다. 이 함수는 argc, argv 이외에 두 개의

중요한 인자를 받는다. 

첫 번째로 UIApplication 클래스의 이름을 전달받는다. nil 을 입력하는 경우는 기본값인 UIApplication이 사용된다.
만약 UIApplication 을 상속받아서 새로운 클래스를 만들었다면 그 이름을 넣어주도록 하자. 

두번째는 어플리케이션 델리게이트의 이름을 입력하며, nil 일 경우 info.plist 에 정의된 NSMainNibFile이 가리키는 nib파일에 설정되어 있는 델리게이트를 이용한다. 



<그림> 어플리케이션 흐름

그림을 통해서 흐름을 이해하도록 하자. 최초 main 이 호출되고 UIApplictionMain 이라는

함수 안에서 UIApplication 클래스가 하나 만들어 진다. 이 클래스는 UIKit8 에서 미리 구현해

놓은 것으로 어플리케이션 자체를 의미하는 클래스이며 한 어플리케션에 오직 하나의 UIApplication 클래스를 가지고 있다. pInfo.list 에서 UIApplication이 사용할 메인 nib 파일을

지정했다면(NSMainNibFile) 이 nib 파일을 읽어들인다. UIKit 프레임 워크는 이 파일을 분석해서

내부에 포함되어있는 객체들을 생성하고 초기화 시킨다. 보통 UIWindow 객체와 UIView 객체 등이 생성될 것이다. 그리고 인터페이스 빌더에서 설정했던 델리게이트나 객체 간의 연결도

설정한다. 이 작업이 완료되면 연결된 델리게이트의 applicationDidFinishLaunching 이

불려진다. 만약 nib 파일이 없는 경우 즉 NSMainNibFile을 설정하지 않은 경우에는

델리게이트의 applicationDidFinishLaunching 가 호출될 때 화면에 보여줄 객체들을 수동으로

만들어 줘야 한다.

그 이후 부터 UIApplication 에서는 이벤트를 처리하기 위한 메인 루프가 실행된다. 사용자가

홈 버튼을 누르거나, 전화를 받는 등의 이벤트에 의해서 어플리케이션이 종료된다.

이 때는 applicationWillTerminate 메시지가 불려지고, 이곳 에서 어플리케이션의 상태를

저장하는 등의 작업을 해야 한다.

UIApplicationDelegate 는 지금 설명한 것 외에도 중요한 이벤트가 발생한 경우 그에 맞는

처리를 할 수 있는  다음 메서드들도 있다.

applicationDidReceiveMemoryWarning
메모리 부족 경고를 받은 경우. 현재 사용중인 메모리를 최대한 해제해야 한다.
applicationWillResignActive
어플리케이션이 실행중일 때 전화가 오면, 전화를 받을 것인지 무시할 지를 선택할 수 있다.

그 전에 이 메서드가 호출될 것이다. 또한 화면 잠금 버튼을 누른 경우에도 호출된다.
applicationDidBecomeActive
사용자가 전화나, 문자 등을 무시하는 버튼을 선택할 경우 다시 어플리케이션이 활성화 된

것을 알 수 있다.
처음 실행될 때 applicationDidFinishLaunching 메시지가 보내진 이 후에도 호출되고, 잠금 상태에서 다시 해제된 경우 도 호출된다.

application:didFinishLaunchingWithOptions
아이폰 OS 3.0에 추가된 것으로 URL 이나 원격 통보(Remote notification) 에 의해서

어플리케이션이 실행된 경우를 처리할 수 있다.
application:didReceiveRemoteNotification
역시 3.0에 추가된 것으로 프로그램이 실행중에 원격 통보(Remote notification)을 받은 경우

필요한 처리를 할 수있다.



출처 : http://blog.naver.com/PostView.nhn?blogId=noonkoki&logNo=70082152048
Posted by 오늘마감

댓글을 달아 주세요

오브젝트C2010. 8. 11. 17:33
Hello iPhone - 1
책에 서술되어 있는 앞부분의 기초부분을 다 날려먹고

우선 눈으로 확인할 수 있는 예제가 필요했던 나는 바로 모든 프로그램의 기초인 헬로월드를 작성하기로 했다.

아주 기본적인 헬로월드는 플래시에서 텍스트필드(static)를 스테이지에 생성해서 그냥 'Hello World"라고 타이핑하는거와 별반 차이가 없다.

view의 역할을 해주는 .xib파일을 하나 생성하고 더블클릭하면 Interface Builder라는 녀석이 실행되면서 

여러개의 inspector들이 열린다. 그중 "View"라는 창에 "Library'라는 창에 있는 "Label" 컴포넌트를 끌어다 놓고 더블클릭해서

"Hello iPhone"이라고 타이핑하고 xCode로 와서 "build and go"를 클릭하면 iPhone Simulator라는 녀석이 실행되면서 

마치 iPhone에서 실행되는것처럼 모니터에 iPhone이 하나 나오고 어플이 실행되듯 Interface Builder의 View에서 만들어 놓은 화면이

보이게 된다. 

일단 이렇게만 하면 목표로했던 헬로월드는 완료!!

그런데 이렇게만 작성하면 mvc의 묘미를 느낄수가 없다. 그래서 다음 예제에 바로 도전했다.

2번째부터는 좀 복잡해진다. 중간중간 다른 일을 해야해서 집중도가 떨어졌지만 여차저차해서 빌드는 했다.

우선 새로운 프로젝트를 만드는데 첫번째 예제에서는 "View-Based Applicaion" 템플릿을 사용했는데, 

두번째에서는 "Window-Based Application" 템플릿을 이용한다.

생성된 프로젝트는 

MyHello //
 -Classes //
 -Otehr Sources
 -Resources //
 -Frameworks
 -products
Targets
Exeutables
Errors and Warnings
Find Results
Bookmarks
SCM
Project Symbols
Implementation Files
NIB Files //
이런식으로 구성된다.

Classes는 딱 보기에도 추가해야할 클래스들을 넣어야하는 패키지인거 같고,

Other Sources는 이미지 파일이나 기타 파일들을 넣는 패키지인거 같고,

Resourcese는 view역할을 하는 .xib파일과 info.plist파일이 저장돼있었고( 이외의 정보는 아직... ),

Frameworks는 템플릿을 정하면 필요한 framework들이 자동으로 추가되는 패키지라고 하고,

Products는 음.... 잘 모르겠다.

Targets, Executables, Errors and Warnings, Find Results, Bookmarks, SCM, Project Symbols, Implementation Files  << 모두 예제에서 언급되지 

않는 녀석들이다.

그냥 느낌상 뭐를 하는 녀석들이구나~하고 있을뿐....

암틈 예제에서 언급된 녀석들은 라벨 뒤에 '//'요게 붙은 녀석들이다.

프로젝트 생성후 window에서 활성화될 view를 추가해야한다. 그래서 View Controller 객체를 하나 만들어야 한다.

Cocoa Touch Classes 항목에 있는 UIViewController subclass를 선택해서 "MyViewController"라는 이름으로 생성해준다.

이때 옵션을 체크하면 .m 파일과 함께 .h파일도 함께 생성된다. 기본으로 설정되어 있다.

자~ 이제 컨트롤러는 하나 만들었으니 MyHelloAppDeligate.h 요 파일에 내가 추가한 컨트롤러 객체와 애플리케이션을 연결해준다.

@class MyViewController;

그리고 interface 멤버변수로 선언해준다.

MyViewController *myViewController;

--------------------------------------------------------------------------------------------------------------------------------
위의 2가지 과정은  as3 관점에서 본다면 
import a.b.c.MyViewController;
var myViewController: MyViewController;
뭐 이런 느낌이다.
--------------------------------------------------------------------------------------------------------------------------------

이제 MyHelloAppDeligate.h 파일에 선언되어 있으니 인스턴스를 생성해보자.

인스턴스의 생성은 MyHelloAppDeligate.m 요 파일에서 할 수 있다.

우선은 생성해놓은 MyViewController.h파일을 import 해준다.

#import "MyViewController.h";

그리고나서는 컨트롤러에 함수 접근자를 사용하겠다고 컴파일러에게 알려주는 구문을 적어준다.

@synthesize myViewController;

객체 생성은 애플리케이션이 초기화되면 이루어져야하므로

flex의 mxml에서 initApp/initialized 같은 느낌의 applicationDidFinishLaunching 함수에서 객체를 생성해준다.

함수내에서만 사용되는 aViewController를 생성해서 MyViewController객체를 받아서 멤버변수인 myViewController에 대입해주고

aViewController는 초기화해준다.

--------------------------------------------------------------------------------------------------------------------------------
왜 이런 방식으로 해야하는지는 내가 c/c++/objective-c에 무지하므로 잘 모르겠다.

초급자를 위한 책이라서 이렇게 한건가..... 음... 아직 잘 모르겠다.
--------------------------------------------------------------------------------------------------------------------------------

다음으로 myViewController의 view를 UIView타입인 controllerView로 받은 후 window의 addSubview의 파라미터로 넘긴다.

window에 view를 추가하면서 자기 역할을 다한 myViewController도 초기화해준다.

컨트롤러는 등록해서 생성까지 했으니 이제 view가 필요하다.

view는 .xib파일인데 NIB Files 패키지 내에 생성해준다.

.xib파일을 더블클릭하면 위에서 한번 언급된 Interface Builder가 실행된다.

이후부터는 이미지가 필요한데 맥에서 어떻게 캡쳐뜨는지 까먹었으므로 생략..........

포스팅하는 시간이 예제 한번 따라하는 시간보다 더 길어지다니... 난감하다. 일단 오늘은 여기서 종료...

이따 출근은 해야하니까 ㅡ,.ㅡ;;




출처 : http://blog.naver.com/PostView.nhn?blogId=3dasu&logNo=140089713852

'오브젝트C' 카테고리의 다른 글

Objective-C의 기초  (0) 2010.08.22
Object-C : Declared Properties 에 대한 깔끔한 정리  (0) 2010.08.12
Hello iPhone - 1  (0) 2010.08.11
The Objective-C 2.0 Programming Language  (0) 2010.06.24
Objective-C  (0) 2010.06.22
Objective-C의 기본 문법  (0) 2010.06.22
Posted by 오늘마감
TAG -, 1, Hello, iPhone

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 25. 09:47
내 첫번째 iPhone Application~~

David Bae의 첫번째 iPhone Application 만들기

먼저, iPhone SDK설치하기~

새로운 프로젝트를 만들고, 실행해서 실행되는지 확인하기...

Interface Builder에서 Control(?)들 써보기..

첫번째 어플이라고 하기에는 테스트 프로그램에 가깝지만.. 그래도 시작은 시작이니 만큼..

하루하루 전진한다는 느낌으로...

 David Bae's First iPhone Application...



출처 : http://blog.naver.com/PostView.nhn?blogId=bjh3958&logNo=120061206872
Posted by 오늘마감

댓글을 달아 주세요

XCODE2010. 6. 25. 07:44
IPhone Toolchain For Linux
오픈 소스 툴 체인 빌드

아마 여러분은 DRM을 내장하여 링크한 애플리케이션을 빌드 하는 것에 반대 의견을 가지고 있거나, 아마도 단지 오픈 소스 소프트웨어를 사용하는 것을 좋아할 것이다. 오픈 소스 툴 체인은 2007년 8월 이래로 존재하였으며 그 동안 무시할 수 없을 만큼 자라나고 있다. 또한 리눅스, 윈도, 오래된 버전의 맥 OS X에서 돌아가게 되었으며, 개발 부서 전체를 레오파드 기반의 맥으로 변환하고 싶지 않을 때 개발자들이 선택할 수 있는 훨씬 저렴한 방법이다.

다수의 오픈 소스 툴 체인 바이너리 배포판이 존재한다. 우리는 아이폰 개발 플랫폼으로 사용하기 위해 단순히 레오파드가 설치된 상태에서 따라가 보겠다.

필요한 것들

인터넷 상에 툴 체인의 비공식 바이너리 배포판이 돌아다니고 있지만 여기서는 소스로부터 직접 빌드할 것이다. 소스로부터 빌드 하기 위해서 아래에 나열된 것들이 필요하다.

지원되는 데스크톱 플랫폼

첫째로 여러분은 지원되는 데스크톱 플랫폼이 필요하다. 현재 툴 체인에서 지원되는 플랫폼들은 다음과 같다.
  • Mac OS X 10.4 Intel or PPC
  • Mac OS X 10.5 Intel
  • Ubuntu Feisty Fawn, Intel
  • Ubuntu Gusty Gibbon, Intel
  • Fedora Core, Intel
  • Gentoo Linux 2007.0, x86_64
  • Debian 2.6.18
  • CentOS 4
  • Windows / Cygwin
  • Conceited Software의 니콜라스 팬리가 레오파드에서 툴 체인 설치가 실행되도록 노력했으며, 우리의 예제에서 이 방법에 나만의 아이폰 OS 지원을 위한 메모들을 덧붙여 사용할 것이다. 다른 플렛폼들도 기본적으로 같은 절차를 따르면 된다. 툴 체인의 공식 설명서는 다음 위치에 있다. http://code.google.com/p/iphone-dev/wiki/Building.

    고속의 인터넷 환경

    이 툴 체인은 그 소스만으로 크기가 수백 메가에 달한다. 고속의 인터넷을 통해 다운로드 하지 않는다면 몇 일 동안 다운로드 해야 될 것이다. 만약 여러분의 인터넷이 그렇게 빠르지 않다면, 아마도 도서관이나 커피숍에서 설치하는 것이 좋을 것이다. [역자 주: 우리나라에선 도서관, 커피숍보다 –충분히 빠른- 집에서 하는데 좋을 것 같습니다]

    오픈 소스 툴

    다음으로 필요한 것은, 여러분의 데스크톱에 다음의 오픈 소스 툴들이 설치되어야 한다.
    • bison (v1.28 or later)
    • flex (v2.5.4 or later)
    • gcc (the GNU compiler that handles C, C++, and Objective-C )
    • svn (the Subversion source control utity)
    • 이들 중 빠진 게 있다면 계속 따라 가기 전에 빠진 것을 다운로드하고 설치해야 한다. 맥에서는 이것들이 Xcode tools에 포함되어 있으므로 최신 버전의 Xcode로 업그레이드 하면 된다. 대부분의 다른 OS들은 이것들을 배포 판 안에서 선택적으로 설치할 수 있도록 제공한다.

      Xcode tools 는 애플 웹 사이트 http://developer.apple.com/tools/xcode/ 에서 다운로드 할 수 있다.

      애플 SDK

      마지막으로 아이폰 OS 라이브러리와 프레임워크를 사용하기 위해 애플 SDK를 복사해야 한다. 여러분의 애플리케이션이 빌드될 때 이것들과 링크될 것이다.

      이미 애플 SDK가 설치되어 있다면 그 프레임워크 라이브러리들을 툴 체인이 볼 수 있는 곳으로 심볼릭 링크만 하면 된다.
      sudo mkdir -p /usr/local/share sudo ln -s/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk /usr/local/share/iphone-filesystem 
      만약 여려분이 이 라이브러리들을 데스크톱에 설치할 수 없다면 jailbroken 1.2/2.0 파일 시스템이 돌고 있는 아이폰으로부터 그 라이브러리와 프레임워크들만 직접 다운로드 할 수도 있다.

      애플은 아이폰에서 데스트톱으로 라이브러리를 복사하는 것을 허용하지 않는다. 여러분이 거주하는 곳에서 이 방법이 합법적인지 확인할 필요가 있다.

      여러분의 아이폰에 SSH를 설치했다고 가정하고, 다음의 명령어를 사용해 파일들을 /usr/local/share/iphone-filesystem 폴더로 복사한다.
      # mkdir -p /usr/local/share/iphone-filesystem # cd /usr/local/share/iphone-filesystem # mkdir -p ./System/library ./usr # scp -r root@[IPHONE IP ADDRESS]:/System/library/Frameworks/ . # mv Frameworks ./System/library # scp -r root@iphone:/usr/lib . # mv lib ./usr 
      툴 체인 컴파일

      툴 체인에 필요한 소스코드는 두 저장소에 나뉘어 있다. 하나는 LLVM 컴파일러 프레임워크고 다른 하나는 나머지 툴 체인이다. 여러분이 사용할 빌드 디렉토리를 만들고 cd 명령어로 그 디렉토리로 이동한다. 이제 서브버젼을 사용하여 두 프로젝트들을 각각의 저장소로부터 체크아웃한다.
      $ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm-svn -r 42498 $ svn co http://iphone-dev.googlecode.com/svn/trunk/ iphone-dev 
      또한 여로 조각의 새 버전의 아이폰 OS를 가져오기 위해 두개의 SVN 저장소를 스위치 아웃 해야 한다. 이렇게 하면, 아이폰 OS가 공식 릴리즈 되면 결과적으로 이를 소스트리의 루트로 머지할 것이다.
      $ pushd include $ svn switch http://iphone-dev.googlecode.com/svn/branches/include-1.2-sdk $ popd $ pushd odcctools $ svn switch http://iphone-dev.googlecode.com/svn/branches/odcctools-9.2-ld $ popd 
      인터넷선의 속도에 따라 다운로드는 한 시간 이상이 걸릴 수 있다. 양쪽 저장소가 모두 체크아웃 되면 이제 빌드를 시작할 차례다.

      아마 여러분이 내장 쉘 명령어인 pushd와 popd의 사용이 친숙하지 않을지도 모르겠다. 이것들은 cd 명령어와 비슷하지만 추가로 디렉터리를 스택에 푸쉬, 팝 한다. 이로 인해 새 디렉터리에서 뭔가를 한 뒤 이전 디렉터리로 돌아와야 할 때 이전 디렉터리가 어디였는지 기억하지 않고도 돌아올 수 있다.

      또한 sudo 명령어가 사용된 것을 볼 수 있는데, 이것은 명령어를 특별한(root)권한으로 실행하는 유닉스 툴 이다. 특정 명령어를 root권한으로 실행하려 한다면 (이 방법은 운영체계의 민감한 데이터에 접근하고 운영체제를 망가트리는 위험한 행동이 될 수 있기 있다) 명령어 앞에 sudo를 붙여 실행하면 된다. 맥 OS X 에서는 그 명령어를 실행하기 전에 root 암호를 물어볼 것이다. 만약 sudo가 없다면 명령어들중 sudo만 제외하고 실행하면 되는데, 먼저 su 실행해 루트 권한을 획득해야 된다.

      1단계: LLVM 프레임워크 빌드와 설치

      LLVM (Low Level Virtual Machine) 프레임워크는 컴파일러를 빌드하기 위한 표준 환경(infrastructure)를 제공한다. LLVM은 기초적인 컴포넌트들을 모두 다시 작성할 필요 없이 표준화된 컴파일러를 빌드하기 위해 필요한 훅(hook)과 API들을 제공한다. 다음의 명령어들을 사용해 llvm 컴파일러의 릴리즈 빌드를 컴파일 하고 설치한다.
      $ pushd llvm-svn $ ./configure --enable-optimized $ make ENABLE_OPTIMIZED=1 $ sudo make install $ LLVMOBJDIR=`pwd` $ popd 
      2단계: 크로스-컴파일-툴 빌드와 설치

      다음의 명령어들을 따라 크로스-컴파일러를 빌드하고 설치한다. 아래의 내용은 Mac OS X 용으로 여러분이 다른 플렛폼을 사용한다면 공식 문서를 읽어 이를 변경해야 한다.
      $ pushd iphone-dev $ sudo mkdir /usr/local/arm-apple-darwin $ mkdir -p build/odcctools $ pushd build/odcctools $ ../../odcctools/configure --target=arm-apple-darwin --disable-ld64 $ export INCPRIVEXT="-isysroot /Developer/SDKs/MacOSX10.4u.sdk" $ make $ sudo make install $ popd $ HEAVENLY=/usr/local/share/iphone-filesystem 
      3단계: 저-수준 API 헤더 설치

      아이폰의 아키텍쳐가 데스크톱과 다르기 때문에 아이폰의 저-수준 API들에 접근하기 위해서 특별한 헤더들을 설치해야 한다. 다음의 명령어들을 사용해 이를 설치한다.
      $ pushd include $ ./configure --with-macosx-sdk=/Developer/SDKs/MacOSX10.4u.sdk $ sudo bash install-headers.sh $ popd 
      4단계: Csu 설치

      Csu는 어셈블리의 "시작" 진입 점에 C 훅을 제공하고, 여러분의 프로그램의 main() 함수가 호출되도록 스택을 구성한다. 이는 꼭 필요한 연결(glue) 코드이다.
      $ mkdir -p build/csu $ pushd build/csu $ ../../csu/configure --host=arm-apple-darwin $ sudo make install $ popd 
      5단계: llvm-gcc의 빌드와 설치

      이제 LLVM, 크로스 컴파일 툴, 그리고 Csu가 빌드 되었으므로 컴파일러 자체를 빌드하고 설치한다. 여기서부터 따라가기 시작했거나 터미널 창을 닫은 적이 있다면 환경변수 $LLVMOBJDIR, $HEAVENLY 가 적적한 디렉터리들로 설정되어 있는지 확인해야 한다. 환경 변수 LLVMOBJDIR는 LLVM을 빌드했을 때 컴파일 된LLVM 오브젝트 파일들의 위치로 설정되어 있어야 한다. 이 값들은 llvm-gcc를 빌들할 때 사용된다. 환경 변수 HEAVENLY는 아이폰의 라이브러리를 데스크톱으로 카피한 위치로 설정되어야 한다. 이 위치는 아이폰의 라이브러리를 데스크탑 어디에 복사했는지에 따라 다르다. 이 디렉터리는 애플리케이션을 컴파일할 때 llvm-gcc에서 프레임워크와 라이브러리에 링크할 때 사용된다. "Heavenly"라는 이름은 애플에서 아이폰 소프트웨어의 1.0 코드 베이스에 붙인 코드명이다. 최근 버전(1.2)의 이름은 “Aspen”이지만 툴 체인 에서는 원래의 이름이 계속 사용되고 있다. 두 이름 모두 스키 슬로프의 이름에서 비롯되었다.
      $ set | grep -e LLVMOBJDIR -e HEAVENLY 
      만약 위의 명령어로부터 아무런 출력을 볼 수 없다면 환경변수를 다시 설정하여야 한다. 빌드 디렉터리로 돌아가 다음 명령어를 실행한다.
      $ pushd llvm-svn && LLVMOBJDIR=`pwd` && popd $ HEAVENLY=/usr/local/share/iphone-filesystem 
      이것들이 모두 준비되었다고 확신하면 컴파일러를 빌드하고 설치하기 위해 다음 명령어들을 입력한다.
      $ mv llvm-gcc-4.0-iphone/configure llvm-gcc-4.0-iphone/configure.old $ sed 's/^FLAGS_FOR_TARGET=$/FLAGS_FOR_TARGET=${FLAGS_FOR_TARGET-}/g' llvm-gcc-4.0-iphone/configure.old > llvm-gcc-4.0-iphone/configure $ sudo ln -s /usr/local/arm-apple-darwin/lib/crt1.o /usr/local/arm-apple-darwin/lib/crt1.10.5.o $ mkdir -p build/llvm-gcc-4.0-iphone $ pushd build/llvm-gcc-4.0-iphone $ export FLAGS_FOR_TARGET="-mmacosx-version-min=10.1" $ sh ../../llvm-gcc-4.0-iphone/configure --enable-llvm=`llvm-config --obj-root` --enable-languages=c,c++,objc,obj-c++ --target=arm-apple-darwin --enable-sjlj-exceptions --with-heavenly=$HEAVENLY --with-as=/usr/local/bin/arm-apple-darwin-as --with-ld=/usr/local/bin/arm-apple-darwin-ld $ make LLVM_VERSION_INFO=2.0-svn-iphone-dev-0.3-svn $ sudo make install $ popd $ popd 
      축하한다! 이제 아이폰을 위한 자유 툴 체인이 설치되었다. 이제 여러분은 아이폰 애플리케이션을 컴파일 할 준비가 되었다. 이 컴파일러는 /usr/local/bin/arm-apple-darwin-gcc 실행하여 바로 실행할 수 있다.

      아이폰 OS용의 애플리케이션을 빌드할 때 추가로 다음 CFLAGS를:
      CFLAGS = -fobjc-abi-version=2 -F/usr/local/share/iphone-filesystem/System/library/PrivateFrameworks 
      그리고 다음의 LDFLAGS를 사용해야 한다.
      -lobjc 
      Resources
      • iPhone Open Application Development -- book by Jonathan Zdziarski
      • iPhone Open Application Development Forum -- Join conversations with author Jonathan Zdziarski, and other developers designing third-party software that will run on the iPhone

      • 출처 : http://network.hanb.co.kr/view.php?bi_id=1530



출처 : http://blog.naver.com/PostView.nhn?blogId=musicnet&logNo=10032583533
Posted by 오늘마감

댓글을 달아 주세요

XCODE2010. 6. 25. 07:44
window 기반 iphone 개발환경 구축

Cygwin 설치


1. http://www.cygwin.com/setup.exe 다운로드한다.


2. Setup.exe 실행

다음 → (install from internet) 다음 → (root 디렉토리 설정) 다음 → 다음 → (Direct Connection) 다음 →
Choose A Download Site 에서 User URL http://iphonegameover.com/cygwin 입력후 Add.
목록의 http://iphonegameover.com 선택후 다음 → (Select Packages:Default) 다음 →
Create Icons 선택에서 Create icon Desktop 체크후 마침.


Tool Chain 라이브러리 설치


1. SDK 설치하기


https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=19907
약 900메가의 dmg 파일로써 압축을 풀기 위해서는,
PowerISO 프로그램이 필요하다 .http://www.poweriso.com/download.htm 에서 다운로드하여 dmg 파일을 푼다.
풀면 Archive.pax.gz 파일을 찾아서 ,
$Cygwin_home\home\쓰고있는계정이름 에 넣는다. ( ex :\cygwin\home\Administrator )


2. iphone 에서 filesystem 를 받아서 Tool Chain 인스톨 하기


Sygwin 인스톨후 실행시키면 filesystem 을 체킹한다. 없다고 나올경우,

 Do you wish to connect to your device and download the required files? y

위의 메시지가 뜨면 y 입력후 엔터.
연결되어있는 iphone 의 IP 주소를 입력한다.

 Please enter the remote IP address of your device : 10.0.0.236

 Are you sure you want to continue connecting (yes/no)? yes
 Do you wish to install the XCode header files now?  y

그러면 iphone 에서 PC로 filesystem 이 설치된다. 설치되면 SDK 를 찾게 되는데,
Archive.pax.gz 파일이 $Cygwin_home\home\쓰고있는계정이름 에 있어야 한다.

 Found Archive.pax.gz in current directory.

 Extracting /home/David/Archive.pax.gz…


  ==> 인스톨후 your toolchain installation is now complete! 라고 뜨면 성공.


참고자료 : http://george.insideiphone.com/index.php/iphone-toolchain/



출처 : http://blog.naver.com/PostView.nhn?blogId=musicnet&logNo=10032895978

'XCODE' 카테고리의 다른 글

XCode 단축키 한눈에 정리  (0) 2010.08.12
IPhone Toolchain For Linux  (0) 2010.06.25
window 기반 iphone 개발환경 구축  (0) 2010.06.25
에버노트(Evernote)  (0) 2010.06.24
cocos2d 0.7.2 XCode template  (0) 2010.06.24
맥에서 숨김 파일 표시  (0) 2010.06.24
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 25. 07:44
iPhone / iPod touch 에 JAVA 개발환경 설치하기
설치대상 : 1.1.4 버전이상 jailbreake 가 설치된 아이폰

 설치 파일이 비교적 크기 때문에 Settings -> General -> Auto-Lock 을 Never 으로 바꾼다.

Installer 를 실행 시키고 Sources 에서 repository (  http://apptapp.saurik.com  )를 ADD 한다.

▷ Refresh 한다.

Install -> System 으로 들어간다. 

Term-vt100 ( Mibile Terminal App ) 를 찾아서 인스톨 한다.

다시 System 으로 들어간다. Cydia Installer ( The Future of the iPhone ..) 를 설치한다.

    // 두개의 패키지가 있는경우가 있는데 아무거나 해도 상관 없다.

iPhone 을 재시작한다.

화면에 Cydia 라는 아이콘이 생성되 있다.

Cydia 아이콘을 눌러 들어간다.

▷ Install - Java 로 들어간다.

필요한 패키지를 설치한다. ( JAVAVM / JocStrap .. ) 

    ( iPhone 에서 자바 컴파일을 하려고 할 경우  jikes 패키지를 설치한다. )

iPhone 을 재시작한다.

★ iPhone 에서 자바 컴파일시 jikes 컴파일러 사용. ( javac 가 아니고 jikes 를 사용한다. )

$>jikes -cp 포함할jar파일위치 HelloJava.java

$>jikes -cp /usr/lib/rt.jar HelloJava.java

★ Windows 에서 컴파일시. ( iPhone 에서 관련 jar 파일들을 FTP 등을 이용하여 가져와야한다. )

- jdk 1.5 이상  -

 $> javac -cp jar파일위치1;jar파일위치2;jar파일위치3 HelloJava.java

권한문제 발생시 : $> chmod 755 HelloJava



출처 : http://blog.naver.com/PostView.nhn?blogId=musicnet&logNo=10033067346
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 14:22
iPhone SDK Tutorial 뷰를 모달로 띄우기
2010.01.25 월요일
오늘 종일 불안한 마음으로 서성인 하루에 한가지 남는 수확이라 여긴게 이거다.
"한개의 윈도우 그리고 여러개의 뷰"
이게 아이폰 개발의 원칙(?)쯤이라 말할 수 있다. 그래서 몇일전부터 고민고민하던게 뭐냐면,
 
 
만들어놓은 뷰를 프로젝트마다 써먹을 수 있는 방법이 뭘까

UIView 는 동적으로 생성될 수 있지만, 일일이 그려가면서까지 만들고 싶은 마음은 없다.
XIB 파일에 넣어진 UIView 를 불러다 쓰는 방법을 고민한 결과
재밌게도 이 방식을 유튜브에서 동영상 튜토리얼로 찾아낼 수 있었다.

방법은 
1. 뷰베이스 어플리케이션을 만든다. [뷰베이스, 즉 메인뷰는 존재한다는 거다]
2. 모달로 띄울 뷰를 만든다. [UIViewController 의 Subclass 로 만드는거다]
3. 메인뷰에서 세컨뷰를 띄워본다. 아래 코드로

#import "SecondView.h"
@implementation SwitcherViewController
-(IBAction)goToSecondView:(id)sender {
SecondView *secondView = [[SecondView alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:secondView animated:YES];
}

4. 세컨뷰에서 메인뷰로 돌아가려면 아래 코드로

@implementation SecondView
-(IBAction)goBack:(id)sender {
[self dismissModalViewControllerAnimated:YES];
}

너무너무 쉬워서 토할뻔 했다. 이걸 그렇게 찾아헤맸다니
유튜브 동영상 링크도 걸어놓자.
https://www.youtube.com/watch?v=coz6zaGEYSk




출처 : http://blog.naver.com/PostView.nhn?blogId=suny4rang&logNo=50081308768
Posted by 오늘마감

댓글을 달아 주세요

«이전  1 2 3 4 5 6 7  다음»