분류 전체보기 269

iOS, Object-C를 이용한 아이폰/아이패드 개발에서 Delegate에 대한 이해-1. prolog

iOS에서 Object-C를 이용해 아이폰/아이패드 개발을 할 때 절대 빼 놓을 수 없는 필수 요소가 Delegate이다. 이게 없으면 개발을 할 수가 없을 정도인데, 블로그에서 delegate에 대해 찾아보면 이에 대한 정보가 정말 빈약하다. 그래서 이 연재를 만들기로 했다. Delegate에 대해 이해하려면 꽤 많은 걸 알아야 한다. 우선 interface나 abstract class 에 대해 알아야 한다. 자바, C#, 델파이, C++, Action Script에서는 interface나 abstract class 라고 부르지만, Objective-C에서는 protocol이라고 부른다. 그리고 callback 에 대해서도 이해해야 한다. Callback은 단순해서 좀 이해하기 쉬운데, 보통은 A 클래..

XCode (4.2)에서 C++과 Objective-C 를 동시에 쓰기

이 간단한 걸 기억 못해서 어제 종일 끙끙댔다. 그래서 기록을 남겨본다 XCode는 C++ 과 Objective-C 를 동시에 쓸 수 있.. 쓸 수 있을수도 있도록 지원하고 있다. 그래서 나는 중요한 클래스는 그냥 C++ 로 만들고 UI와 관련된 부분만 Objective-C 로 만들려고 생각하고 있다. 그런데, 오랜만에 해보니 이게 잘 안되는거다. 블로그 검색해도 잘 나오질 않고. 방법은 간단하다. 1. C++클래스를 사용하는 Objective-C 파일의 확장자를 .m 에서 .mm 으로 바꿔준다. .cpp 확장자를 .mm으로 바꾸는 게 아니라, .m 파일의 확장자를 .mm으로 바꾸는거다. 이렇게만 해도 되는데, 만약 이래도 안되면, 2. .cpp 파일의 속성을 아래와 같이, "Objective-C++ s..

혼자 버그라고 오해한 XCode 4.2의 컴파일 에러

오늘 그렇잖아도 시간도 별로 없었는데, 짬날때마다 이것 때문에 삽질 좀 했슴미다. 너무나도 단순한 문제인데 컴파일이 안되어 이거이 XCode 4.2의 버그라고 생각했는데, 역시나 제 잘못이었슴미다. 진짜 간단한, Apple에서 제공한 tutorial을 따라하는 중이었는데, #import @interface HelloView : NSView { NSString * m_pstrText; // 여기서 보여줄 문자열 } -(void) test; @end 위와 같은 클래스를 정의해 놓고, 외부에서 test() 메소드를 호출하겠다고만 하면 "AutoreleasePool count reference issue" 라고 시작하는, 암튼 저런 함수가 없다 라는 말도 안되는 컴파일 에러 메시지가 나온다. clean을 아무리..

macos Lion으로 업데이트 후 XCode를 4.2로 업데이트 후 AutoReleasePool의 변화

예전엔 XCode에서 Console 프로그램을 만들면 int main() { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; ... [pool release]; } 이런 식으로 진행되었던게, 이번에 4.2로 업데이트 후 다시 보니, int main (int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); } return 0; } 이렇게 바뀌었다. @autoreleasepool 의 블록으로 감싸서 그 안에서 reference count를 기반으로 한 메모리 관리가 되도록 한 것이다. 좀 많이 편해졌다고 봐야 하나. 타이핑할 ..

카테고리 없음 2011.10.18

사진 관련 잡지를 찾다가 iOS5로 업그레이드하면서 알게 된 뉴스 가판대 잡지-Popular Photography

전부터 사진 관련 잡지들을 찾아봤었는데, 딱히 눈에 들어오는 게 없더라구요. 그러다 이번에 아이패드를 iOS5로 업그레이드하면서 IOS 5에 새로 생긴 뉴스 가판대에서 이것저것 뒤적이다 “Popular Photography” 라는 잡지가 있는 걸 알았습니다. 이렇게 생겼는데, 프리뷰용을 보다 보니 괜찮겠다 싶어 2011년 9월호를 $2.99에 구입했습니다. 영문판만 있는 거 같습니다. 어차피 사진만 볼건데 뭐.. ㅋ. 가격 정책은 최신호는 $4.99, 한달이라도 지난 건 $2.99 입니다. 최신호가 한 5,500원, 달이 지나면 3,500원 정도 하는 거네요. 그리고 한달에 $1.99를 내면 달마다 자동으로 새 잡지를 받아볼 수 있고, 6달을 자동으로 볼 거면 $9.99, 1년은 $14.99 네요. 1년..

IT이야기 2011.10.14

[CentOS 6] 설치 후 콘솔 해상도 조정하기

centos 6를 처음 설치하고 나면, 콘솔인데도 해상도가 너무 높아(아마도 최고 해상도로 설정되는 듯) 굉장히 불편하다. 차라리 X-Window를 깔아 써야겠다고 생각하면서 yum을 사용하려다, 그래도 난 콘솔이 더 편한데... 하는 생각에 찾아봤다. 여기저기서 다들 /boot/grub/menu.lst 파일을 수정하라고 하는데, 이거이 처음엔 잘 되다가 내가 링크를 깨먹는 바람에 ㅋㅋ 안되버리는 거다. 그러다 알아낸 거. /boot/grub/grub.conf 파일을 수정하면 된다. 그리고 리부팅. 이 파일 안에 kernel이라고 되어 있는 부분이 있는데 (# 주석으로 시작하는 부분 말고) 이 끝에 vga=0x311 video=640x480-256@60 이라고 넣어주면 된다. 이렇게 하면 640x480의..

서버/linux 2011.10.11

[CentOS 6] 처음 설치 후 IP 설정 안될 때

CentOS 6를 WebServer로 설정 후, setup 해서 네트워크 IP를 분명 제대로 다 설정해 줬는데 이게 반영이 안되었다. #/etc/init.d/network restart 를 해도 반영 안됨. 이럴 때 방법은 다음과 같다. root로, #vi /etc/sysconfig/network-scripts/ifcfg-eth0 해서 그 안에 정보들을 다 잘 적어주고, ONBOOT=yes 가 설정되어 있는지 확인. 여기까지 하면 # reboot 해준다. 이제 부팅되면서 eth0을 물고 들어올 거다. CentOS 속도 빨라졌네요. 이 글이 도움이 되셨다면 아래 손꼬락을 꼬옥 눌러주세요. 큰 힘이 됩니다. 그리고 댓글도 남겨주시면 더더욱 크~ㄴ 힘이 됩니다. ^^;

서버/linux 2011.10.11

자바, iOS의 Object 와 id 에 대해

오랜만에 프로그래밍 관련 글을 쓰는군요. 자바의 Object 나 iOS의 id에 대해 궁금해 하시는 분이 계셔서 글을 쓰게 되었습니다. ^^; 자바의 Object에 대해 먼저 설명하겠습니다. Object는 클래스다. 자바의 Object는 클래스입니다. 자바에는 무수히 많은 클래스가 있습니다. 거의 모든 걸 다 클래스로 만들어 놓았죠. 그래서 자바를 만든 제임스 고슬링의 별명이 "Every thing is classes" 라고 합니다. 이 말은 굳이 클래스로 만들지 않아도 될 것을 클래스로 다 만들어서 속도저하를 일으키고 있다는 걸 빗대고 있는 거라 생각되네요. 암튼. 자바에 무수히 많은 클래스가 있는데, 그 클래스들마다 공통으로, 반드시, 꼭 구현되어야 하는 기능들이 있습니다. 자동차를 예를 들어 보죠...

iBatis 삽질의 추억

아. iBatis. 오늘 transaction을 명시적으로 적용한 (SqlMapClient.startTransaction() ) 함수를 하나 맹글었는데, 사실 그동안 iBatis에서 transaction을 쓸 일이 별로 없었다규. 이거이 쓰고 나면 딱 커넥션풀 갯수만큼만 잘 되고 그 다음부터는 커넥션풀을 얻어오지 못했다는 타임아웃 에러가 나고 먹통이 되어버린다. 밥먹고 와서 삽질한 결과, 드뎌 알아냈다. iBatis에서 startTransaction을 했거든 commitTransaction만 하지 말고 꼭 endTransaction도 하라는 것. 이런 형태면 된다. try { SqlMapClient.startTransaction(); ..... SqlMapClient.commitTransaction();..

AIX에서 부팅하면서 자동실행될 파일들 등록하기

리눅스에서는 /etc/rc.local에 등록하면 끝이었지만, AIX는 약간 다르다. 지금 내가 쓰고 있는 AIX의 버전은 6.1이다. /etc/inittab 하면 주석을 제외한 맨 첫줄에 (주석은 : 으로 시작한다.) init:2:initdefault: 라고 되어 있는 걸 확인할 수 있다. 가운데 숫자가 2로 되어 있는 걸 확인하자. 숫자가 2로 되어 있으면 rc2.d 디렉토리 안에 원하는 스크립트를 넣으면 된다. cd /etc/rc.d/rc2.d 이 디렉토리로 이동하면 여러 스크립트들이 보이는데, 여기에 내가 원하는 스크립트를 넣으면 된다. 다만 스크립트 명을 지정해 줄 때 몇몇 규칙이 있다. 시작은 반드시 대문자 S로 시작해야 한다. S 다음에 숫자를 넣어야 하는데, 이 숫자의 순서대로 스크립트가 실..

IT이야기 2011.04.24