http://blog.naver.com/PostList.nhn?blogId=sonofgrace&from=postList&categoryNo=11

저작자 표시 비영리 변경 금지
신고
Posted by 용식

[IOS] UIScreen

Objective-C 2012.12.13 10:04

UIScreen은 IOS의 실제 스크린을 나타내며, bounds 메시지를 사용하면
IOS 스크린의 전체사이즈를 가지고있는 CGRect가 return (320 * 480)



applicationFrame 메시지를 사용하면 중앙 application영역 - (status bar와 navigation bar를 사용하는)의 CGRect가 리턴.. (320 * 416)


20은 status bar, 44는 navigation bar


저작자 표시 비영리 변경 금지
신고
Posted by 용식

IOS5 Developer's Cookbook에 나온 예제..

이 외에도 여러방법이 있다. 


책에는 

signature = [[self carInfo] methodSignatureForSelector:@selector(UTF8String)];


이 부분이

signature = [carInfo methodSignatureForSelector:@selector(UTF8String)];


이렇게 되어있다. 이게 계속 null을 리턴해서, runtime error가 발생하는데 이유를 몰라서보니..

carInfo가 readonly이고, 값이 할당되지 않은 상태라서 null을 리턴하는 것 같아 [self carInfo]로 정상적으로 값이 할당된 NSString을 받아오도록 수정해보았다. 그랬더니 잘 되네... 


가장 간단한 forwarding은

forwardingTargetForSelector:(SEL)sel 쓰는거라고 되어있다..


암튼 null이 리턴되는 이유를 찾아내서 (확실하진 않지만..) 다행.. 아오 내 2시간....




저작자 표시 비영리 변경 금지
신고
Posted by 용식


(http://book.11st.co.kr/Goods.do?cmd=detail&gdsNo=M0000001005057)



얼마전에 구매해서 읽었던 오브젝티브C 책이 마음에 썩 차지 않아서..

한권 더 구매해서 본 책입니다.

자바에 너무나 익숙해져 있어서 특히 저 제목에 좀 더 끌린 부분도 있구요..

내용이 꽤 두꺼운데요.... 일단 각 챕터별로 자바와 비교하여 설명을 해주고 있는 부분은

마음에 들어요. 


다만, 내용이 너무 방대하다보니..

개인적으로 읽으면서는 아카이빙이나 통신 등등 나중에 사용하게 될 경우 다시 보게 될 부분들은

대충 훑어만보거나 건너 뛰었습니다.


초반에 개념을 잡아주는 부분이 좀 더 자세하게 작성되었으면.. 하는 아쉬움이 조금 있네요.


그래도, 예제나 이런 부분들이

필요한 부분에 대해서 심플하게 되어있는 부분은 좋았던 것 같습니다.


사실 두권의 오브젝티브C를 봤는데..

실제 업무나 개인적인 프로젝트를 진행하지 않으면서 책만 가지고 뭔가 파악하기에는

어려움이 많죠... 샘플 코드를 가지고 이런저런 방법으로 바꿔가면 테스트해보고 공부하는게 가장 좋은 방법이라서...


그래도 어찌되었든 처음 접하는 언어에 대한 선행 학습은 꼭 필요하다고 생각하기 때문에..

특히 자바를 사용하시는 분들에게는 나쁘지 않은 선택이 될 듯 합니다.


다만, 최신 버전의 Obj-C와는 어떤 차이가 있는지까지는

파악하지 못 했네요.

저작자 표시 비영리 변경 금지
신고
Posted by 용식

NSDictionary의 정렬 메소드 중 keysSortedByValueUsingSelector:(SEL)selector 가 있다.

NSDictionary의 value로 키값을 정렬하는 메소드이다.


역시나.. 자바에만 익숙해져있는 나는..

이 상황이 이해가 안된다. ㅋㅋ 아니 뭐 NSDictionary가 정렬 메서드를 가지고 있으면 되는거지

저기다가 Selector를 던지는건 당최 뭐람...




이런것인데... 바로 keysSortedByValueUsingSelector:@selector(compare:).. 이 부분이

처음 이해가 안 되었던 부분.. Java랑 비교하면.. Map으로 들어가는 객체가 Comparable 인터페이스를 구현한 것과..

비슷하다고 보면 될듯하다.


실제로 위 메서드가 호출되면 NSDictionary의 value로 들어가 있는 객체에 구현되어 있는 compare 메서드를

실행한다. 위와 같은 경우는 NSString에 구현되어있는 (오버라이드 되어있는) compare가 사용되는것 같다.

모르긴 몰라도 그 selector 자체를 value로 들어가 있는 객체에 던져서 실행을 하겠지..

(엄격히 얘기하면.. -(NSComparisonResult)compare:(NSString *)otherString;이 되겠다.)


예를들어서 Person이라는 클래스를 하나 정의했을 때..


Person.h
Person.m
main.m

만약, Person.m에 compare 메서드가 구현이 안되어있다고 하면,.

위 실행코드는 런타임에 에러가 발생한다.


Person을 비교 할 메서드가 없기 때문.. (여기서는 compare)


그렇다면... 혹시 메서드의 이름이 굳이 compare가 아니어도 되지 않을까? 그냥 NSComparisonResult가 리턴하는 메서드면

되지 않을까.. 라는 생각이 들어서.... 즉흥적으로 테스트를..


Person에 아래와 같은 메서드를 선언 및 구현하고..



돌아간다... ㅋ

자바처럼 꼭 같은 인터페이스여야만하는.. 그런 제약은 없는 것 같다. 주로 메서드의 시그너쳐를 중심으로 돌아갈 수 있는 구조인듯하다. 그래서 공식/비공식 프로토콜도 나누어져있고.. 카테고리라는 기법도 가능한듯..

저작자 표시 비영리 변경 금지
신고
Posted by 용식

책 보면서 따라가는 것도 힘드네..

와~ delegate 모델... 와~ delegate 모델 소리가 절로 나오는구나..

앞의 "와"는 감탄이고.. 뒤의 "와"는 반쯤 짜증....

기본적으로 자바처럼 인터페이스에 기반한 뭐 그런게 아니라 메서드 시그너쳐에 기반해서

움직이는 것 같기는한데.. 잘 이해가 안된다..


책에서 나온 예제를 따라하던 중...

IOS용 App을 만들려고하면 기본적으로 PrefixAppDelegate.h와 PrefixAppDelegate.m이 생기는데..

이 클래스가 앱 자체에 대한 delegator 역할을 하는건 좀 이해가 간다..


이 AppDelegate.h에서 UINavigationCotroller를 프로퍼티로 선언하고..

아래와 같이 app구동시 위임메서드를 통해 rootViewController (UITableViewController의 서브클래스)를 push해준다.



여기까지는 어느정도 ok...


그리고 저 root컨트롤러 역할을 하는 BIDFirstLevelController에서 특정 사용자 액션에 대한 메서드를 실행하여

두번째 레벨의 컨트롤러(UITableViewController의 서브클래스)를 생성해서 다시 self.navigationcontroller에 넣어주는데..




여기서는 self.navigationController다....


이게 갑자기 어디서 나온건지를 모르겠네..

예상하기로는 appdelegate에서 생성한 navigationController를 root view가 그대로 받아서 쓰는것이 아닐까 생각되는데..

그럼 어딘가에는 선언이 되어있어야 하는거 아닌가... UITableViewController가 뭘 상속하고 있는건가..


아 .. 이정도면 기본도 이해 못 하는 상태인 것 같다. 책을 다시 읽어야하나...ㅠㅠ 

머리가 자바에서 헤어나오지를 못 한다...


일단 제껴두고

http://www.yetanotherchris.me/home/2010/10/18/uitableviewcontroller-by-example.html

이거 한번 따라해봐야겠다..


-->

이상용매니저님이 알려주신.. self.navigationCotroller는 자기를 들고 있는 네비게이션 컨트롤러를 지칭한다.


이 한마디에 확 .. 이해가 되는구나... ㅠㅠ


저작자 표시 비영리 변경 금지
신고
Posted by 용식

간단한 예제..



NSMethodSignature의 객체를 생성 할 때 셀렉터를 지정하는데 NSInvocation의 객체를 생성 할 때도

셀렉터를 set해줘야 함... signature는 특정 셀렉터와 연결되는 것이 아니라 구성의 정보만 가지고 있는 상태라

그렇다고 함....



저작자 표시 비영리 변경 금지
신고
Posted by 용식


(http://book.11st.co.kr/Goods.do?cmd=detail&gdsNo=M0000001585301)


이미지는 개정판인데..

제가읽은건 개정판은 아닙니다. 예전 책이구요...

덕분에 새로운 컴파일러에 대한 내용이 없어서 조금 고생했네요..

오히려 그런걸 더 좋아하기도 합니다. 책과 다른 현실을 극복하기 위해서 이것저것 찾아보다 보면

새로운걸 알게 되거든요..ㅎㅎ


아무튼..

Objective-C를 처음 배우면서.. 프로그래밍도 초보인 사람도 읽을만한 내용이기는 합니다.


책 내용 자체가 그렇게 쉽다기 보다는 저자의 설명이

그런 형식으로 되어있습니다. 하나하나 설명하는.. 사실 그런 스타일이 좋아서

이 책을 구매하기도 했구요...


아이폰 앱 개발을 해보고 싶은데

아이폰 앱 개발 책을 바로 보는 것은 성격이 맞지 않아서 굳이 Objective-C 책을 구매하여서

공부를 하게 되었네요...


전철에서는 다른 책 보고

회사 점심시간에는 이 책 보고..하면서 2주일 동안 2권을 완독했네요.


저 책일 읽었다고 당장 자신감있게 Objective-C를 다를 수는 없겠지만

그래도 뭔가 좀 다가갔다라는 느낌이 드는게 좋습니다.


Objective-C를 처음 공부하시는 분들께는 추천을 해드리고 싶네요.



저작자 표시 비영리 변경 금지
신고
Posted by 용식

Objective-C 2.0 책으로 공부를 하고 있다.

Xcode는 최신 버전인 것 같고..

책에서는 NSAutoReleasePool을 사용하고 있는데 

Xcode가 기본적으로 Automatic Reference Counting를 쓰도록 되어 있어서

책과 실제 작성 가능한 코드의 GAP에서 또 한참 헤맸다 --;


ARC가 활성화 되어있으면 [pool drain]이나 retaionCount와 같은 메서드를 아예 사용하지 못 한다.


좀 찾아보니 아직 써드파티 라이브러리등은 ARC를 지원하지 않는다고 하고..

뭐 잘쓰면 약 못 쓰면 독이라는 이야기도 많다.

처음 Objective-C를 배우는 입장에서 이 ARC가 굉장히 편하게 다가오기는 하는데

근본적으로 GC와는 다른 메커니즘으로 돌아가는 이 ARC를 내용도 모르고 그냥 믿고 쓰기에는 또

성격상 맞지 않아서.... 책에 있는 메모리 관리에 대한 내용을 잘 읽어보고는 있다..


나중에는 뭐... 다 ARC를 사용하는 코드가 되지 않을까 싶지만...


아무튼...

책의 예제 중 retainCount를 조회하는 예제가 있는데..



NSNumber *myInt = [NSNumber numberWithInteger: 100];
NSLog(@"%lx", (unsigned long) [myInt retainCount]);

이라는 코드가 있다.

책에는 위 예제는 1을 출력한다고 하는데

내가 직접 작성해서 돌려보니 7fffff--- 가 나온다.


unsinged long의 최대값인거 같은데 뭔짓을 해도 안 바뀐다.. ㅠㅠ


좀 더 찾아보니 


스택객체의 retainCount는 0xFFFFFFFF로 UINT_MAX 값을 갖습니다.

애플 개발자 문서에 절대 release되지 말아야 할 객체는 UINT_MAX를 반환해야 한다고 명시되어 있는데요,

initWithString으로 초기화 하면 해당 객체를 스택객체로 만들어 버립니다.

이 객체에는 release메시지를 보내도 아무런 효과가 없습니다. 

참고로 initWithFormat으로 만들면 힙객체가 됩니다.


이라는 문구를 봤다..


아 저게 혹시 스택객체인가.. 싶어서 NSMutableArray를 하나 생성해서 retainCount를 찍어보니 "1"이 나온다..


후덜...


단순 문법이 아니라 또 이렇게 내용이 들어가니.. 엄청 새롭다..

힙객체는 뭐고 스택객체는 뭐여...

그리고 컴파일러가 버전업 되면서 메서드의 작동 방식이 바뀐건지...


훔,,

NSNumber도 [[NSNumber alloc] init] 으로 생성하니 retainCount가 0이 되는군...


http://stackoverflow.com/questions/7252115/nsnumber-numberwith-n-initwith


저작자 표시 비영리 변경 금지
신고
Posted by 용식

http://seorenn.blogspot.kr/2012/06/xcode-arc.html

저작자 표시 비영리 변경 금지
신고
Posted by 용식


티스토리 툴바