오브젝트C2010. 10. 12. 03:58
자바보다 훨씬 직관적인 object-c 의 간단한 NSThread 사용 방법

자바보다 훨씬 직관적이다. import할 클래스나 delegate도없다.

- (IBAction) startThreadButtonPressed:(UIButton *)sender {

threadStartButton.hidden = YES;
threadValueLabel.text = @"0";
threadProgressView.progress = 0.0;
[NSThreaddetachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:selfwithObject:nil];

}

- (void)startTheBackgroundJob {

NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc] init];
// wait for 3 seconds before starting the thread, you don't have to do that. This is just an example how to stop the NSThread for some time
[NSThreadsleepForTimeInterval:3];
    [selfperformSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nilwaitUntilDone:NO];
    [pool release];

}

- (voidmakeMyProgressBarMoving{
    
float actual = [threadProgressViewprogress];
threadValueLabel.text = [NSStringstringWithFormat:@"%.2f", actual];
if (actual < 1) {
threadProgressView.progress = actual + 0.01;
[NSTimerscheduledTimerWithTimeInterval:0.5target:selfselector:@selector(makeMyProgressBarMoving) userInfo:nilrepeats:NO];
}
elsethreadStartButton.hidden = NO;

}


1.버튼을 누르면 아래의 스레드가 실행된다. 자바에서 start()와 같은 역할.
[NSThreaddetachNewThreadSelector:@selector(startTheBackgroundJobtoTarget:selfwithObject:nil];
2. 콜백으르 startTheBackgroundJob가 있고 위에 정의된 함수가 콜백된다. 자바의 run()과같은 역할
2.1 스레드에의해 콜백되는 함수는 
    NSAutoreleasePool *pool = [[NSAutoreleasePoolallocinit];로 시작하고

    [pool release];로 끝나야한다.

    시작점과 끝점사이 실제실행하고싶은 코드나 함수호출코드를 집어넣으면 된다.


2.2 위의 콜백함수는 타이머에

NSAutoreleasePool *pool = [[NSAutoreleasePoolallocinit];

// wait for 3 seconds before starting the thread, you don't have to do that. This is just an example how to stop the NSThread for some time

[NSThreadsleepForTimeInterval:3];

    [selfperformSelectorOnMainThread:@selector(makeMyProgressBarMovingwithObject:nil

     waitUntilDone:NO];





출처 : http://blog.naver.com/PostList.nhn?blogId=philipousys¤tPage=151
Posted by 오늘마감

댓글을 달아 주세요

오브젝트C2010. 8. 12. 16:40
Object-C : Declared Properties 에 대한 깔끔한 정리

이번에는 Object-C의 Property에 대해서 이야기를 해볼까 합니다.

어떻게 보면 조금 필요없어 보일수도 있고 어찌보면 MVC(Model, View, Controller)개발 기법과도 밀접한 연관이 있어 보입니다.

하지만 일반적으로 MVC개발에서도 setter/getter로 구성 된 도메인 객체를 따로 두고 있듯이 Object-C에서도 역시 비슷한 구현을 할 수 있는것 같습니다.

Object-C에서 일반적으로 객체의 Property에 접근하기 위해서는 한쌍의 접근자 메서드(getter/setter)를 사용합니다.

이 메서드들을 사용함으로써 객체지향 프로그래밍의 캡슐화(Encapsulation)에 더욱 충실 할 수 있습니다.

관련된 자료는Object-Oriented Programming with Objective-CMechanism Of Abstraction을 찾아보라고 하는군요.

Property를 정의함으로써 효과적으로 접근자 메서드들을 간략화 시키는 효과를 가져올 수 있습니다.

Property를 사용하기 위해서 일반적으로 @property 지시자와 @synthesize 지시자를 함께 사용합니다.

@property 지시자는 클래스의 @interface 내부에 선언하며 다음과 같은 형식으로 선언합니다.

@property(attributes) type name;


하나의 Property 선언은 두개의 접근자 메서드와 동일한 기능을 갖습니다.

@proprtyfloat value;


위의 선언은 다음과 같이 두가지 메서드를 선언한것과 같은 기능을 하게 됩니다.

-(float)value;
-(void)setValue:(float)newValue;



@property 지시자의 attributes 에는 다음과 같은 정의를 할 수 있습니다.

getter=gettername
기본적으로 Property의 getter 메서드 명은 Property 자신의 이름과 동일 (예 : Property가 foo일 경우 foo)
하지만 이 기본 설정을 내가 원하는 메서드명으로 변경 할 수 있습니다.

setter=settername
Property의 setter 메서드 명은 setPropertyName:입니다. (예 : Property가 foo일 경우 setFoo:)
역시나 이 기본 설정을 내가 원하는 메서드명으로 변경 할 수 있습니다.

readwrite (DEFAULT)
Property의 값을 읽고 쓸 수 있다는 것입니다. 이 설정은 기본 설정입니다.

readonly
Property의 값을 단지 읽기만 할수 있다고 정의하는 속성입니다.
이 속성은 @implementation 블럭 안에서 오로지  getter 메서드만 필요할 경우에 사용합니다.
@synthesize 지시자를 사용하였을 경우에는 역시나 getter 메서드의 역할만을 하게 됩니다.
값을 대입 하려고 할 경우 에러를 출력하게 됩니다.

assign(DEFAULT)
단순하게 값을 대입합니다. 기본설정입니다. 이전에 어떤 객체를 가리키고 있던 Property라면 이로 인해 해당 객체는 미아가 되어 메모리릭의 주범이 될 수 있습니다. 가비지콜렉터를 사용하지 않는다면 사용을 피해야 합니다.

retain
이것은 assign과 비슷하지만 조금 다릅니다. 이전에 가리키고 있던 객체가 있다면 해당 객체를 Release하여 메모리에서 제거 합니다. 가비지콜렉터를 사용한다면 결과적으로 assign과 동일한 결과를 가지겠지만 좀더 명시적으로 사용해 주면 좋을것 같습니다.

copy
객체를 바로 대입하지 않고 해당 객체의 복사 메서드를 Invoke호출합니다.
그리하여 다른 메모리 영역에 복사본을 만든 다음 그것을 반환하게 됩니다. 이전에 가리키고 있던 값은 Release 시킵니다.

nonatomic
이 속성은 접근자 메서드가 Atomic 하지 않게 동작하게 합니다(?). 기본적으로 접근자는 Atomic하게 동작합니다.
Atomic이라는 말은 멀티스레드 등으로 구성된 프로그램이 특정 접근자 메서드를 호출할때 서로 충돌이 나지 않도록(보통 세마포어니 크리티컬섹션이니 하는 말들 들어보셨을겁니다.) 객체 레벨에서 Lock을 걸고 Property에 접근하게 되는데요 매우 좋은 이야기지만 접근할때 마다 Lock을 걸고 다시 푸는 작업이 반복되므로 퍼포먼스를 떨어뜨리는 결과를 가져오게 됩니다.
이런 접근이 필요없다면 이 속성을 사용하여 Non-Atomic하게 동작하도록 만들어 주시는 것이 좋습니다.

이제 Property에 대해 거의 모든것을 알게 된것 같네요. 이제 예제를 한번 볼까요?

@interfaceMyClass:NSObject{
   
NSString*value;
}
@property(copy, readwrite)NSString*value;
@end

@implementationMyClass
@synthesize value;
@end


value라는 이름의 Property의 getter 메서드 명은 value이고 setter 명은 setValue입니다.

값을 대입할때 복사가 일어나고 읽고 쓰기를 할 수 있습니다. 또한 nonatomic 속성이 없으니 atomic하게 동작하겠군요.

마지막으로 Property를 사용할때 주의사항이 한가지 있습니다.

객체가 제거 될때 소멸자로 dealloc이 호출되는데 Property들이 자동으로 소거되지 않아 명시적으로 제거해 주셔야 합니다.

-(void)dealloc {
   
[value release];
   
[super dealloc];
}


출처 : http://blog.naver.com/PostView.nhn?blogId=74hans&logNo=109471860

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

다른언어와 다른 Objective-C 만의 특징  (0) 2010.08.31
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
Posted by 오늘마감

댓글을 달아 주세요

오브젝트C2010. 6. 21. 23:52
Object-C 윈도우강의 4편

http://cafe.naver.com/mcbugi/32428

**************** 3. Dev-Cpp 에서 실제 예제 가지고 실행해보기~~ *********************

자 이제 진짜 마지막입니다 ^^;
저번장까지해서 Dev-Cpp의 환경설정을 마쳤는데요.
이제는 실제로 프로그램을 짜서 컴파일하는 걸 보여드리겠습니다


1. Dev-C++ 를 실행하고 새로만들기 > 프로젝트를 클릭합니다




2. Empty Project 를 선택하고, 프로젝트명을 hello 로 해보죠. 참 라디오버튼은 C를 선택해주세용



3. 새로만들 프로젝트를 저장합니다. 저는 test 폴더에 저장중





4. 생성된 hello 프로젝트를 선택하고 오른쪽버튼 클릭-> 유닛추가를 클릭합니다



5. 새로생성된 창에 간단한 Objective-C 예제를 코딩해보았습니당



6. 이제 저장인데요. Dev-Cpp 의 경우 기본적으로 C와 C++ 컴파일을 지원하기때문에 파일을 Objective-C 의 확장자인 m형식의 파일로 저장하기위해서는 파일형식을 All files 로 해놓고 저장해야합니다
저장한뒤 F9 버튼을 누릅니다



7. 이런창이 뜨시나요? ^^ 그럼 환경설정이 제대로된겁니다



이상 윈도우 환경에서 편하게 Objective-C 를 공부할 수 있는 내용을 살펴보았습니다.



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

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

Objective-C - @protocol 예제  (0) 2010.06.22
Objective-C에서 SEL,@seletor,performSelector 예  (0) 2010.06.22
Object-C 윈도우강의 4편  (0) 2010.06.21
Object-C 윈도우강의 3편  (0) 2010.06.21
Object-C 윈도우강의 2편  (0) 2010.06.21
Object-C 윈도우강의 1편  (0) 2010.06.21
Posted by 오늘마감

댓글을 달아 주세요

오브젝트C2010. 6. 21. 23:52
Object-C 윈도우강의 3편

http://cafe.naver.com/mcbugi/32426

*************** 2. Dev-Cpp 환경설정 ******************

전장에서 했던거 계속 이어가용...
이번장에선 Dev-Cpp 첫번째 실행한담에
첫번째 예제돌리는거도 보여드려용

단순히 objc 프레임워크(기본 Objective-C ) 뿐만아니라 Foundation 프레임워크에서 돌아가는 예제를 일부러 놨습니다.

즉,, Dev-Cpp 를 이용해서 Foundation 프레임워크 기반
프로그램을 만들수 있다는 얘기~~


1. Dev-Cpp 를 첫번째 실행하면 뜨는 창- 무시하고 넘어감다.~


2. 우리는 한국인이니까.. 한국어 선택


3. 드디어 나온 첫번째창


4. 이제 슬슬 환경설정해볼가용... 도구 메뉴 > 컴파일러설정



5. 화면에 보시는대로 두개의 체크박스 체크후 
  첫번째에
-lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import
두번재에 
 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import
를 써줍니다.




6. 자 이제 디렉토리로 이동해서 실행파일 추가를 해볼가용~
실행파일들에 
C:\GNUstep\mingw\bin
 C:\GNUstep\bin
추가합니다



7. 라이브러리에
C:\GNUstep\mingw\lib
 C:\GNUstep\GNUstep\System\Library\Libraries
추가합니다



8. 인클루드에
 C:\GNUstep\mingw\include
 C:\GNUstep\GNUstep\System\Library\Headers
추가합니다



그리고 확인 버튼....
휴 이미지가 많아서 쉽지않아 ^^;;

마지막장에서 첫번째 예제를 실행해보겠습니다



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

댓글을 달아 주세요

오브젝트C2010. 6. 21. 23:52
Object-C 윈도우강의 2편

http://cafe.naver.com/mcbugi/32425

**** 1. 필요한 설치 파일 다운받은후 설치하기 **************

사례1. 아... 아이폰 어플개발을 할랴는데 맥북이 필요하다는데 맥북부터 질르자.
개발자 전모씨는 일단 성급한 마음에 맥북이랑 아이폰 책을 질러버렸다.
그 없는돈에도..ㅠㅠ

아..한 100 깨지니까 정신이 혼미하네..
큰맘먹고산 맥북을 열고 xcode 도 깔았는데...
아이폰 책은 따라하기 식이긴한데..
문법을 몰르니 ..쩝.. 접어야지

사례2. 맥북을 열긴열었는데.. 복사는 어케하는거야? 'End'키는 어디있는거야.
개발자 전모씨는 프로그램 개발에 앞서서 매킨토시 사용법부터 익히기로했다.
아이폰 어플개발은.. 저기..멀리 날아가나..

ㅎㅎ 음. 뭔가 사례를 들라고했는데 재미가없군요.
눈치채셨다시피..개발자 전모씨는 접니다 -.-;

일단 아이폰 어플개발하기전에 Objective-C 언어를 익혀야되는데요.
제가 경험한 바로는 Objective-C 기초를 익히는 단계에선 아직 맥북이
필요 없다는겁니다.

첨부터 괜히 질른거죠.
Window 환경에서 Objective-C를 먼저 익히고 그담에 맥으로 넘어갑시다.

윈도우 환경설정 시작합니당.~~

1. 필요한 파일을 다운받읍시당
GNUstep System 0.24.0
 -
http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/gnustep-system-0.24.0-setup.exe
GNUstep Core 0.23.1
-
http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/gnustep-core-0.23.1-setup.exe

dev c++
- 파일첨부 확인(http://www.appsnext.com/work_data/devcpp-4.9.9.2_nomingw_setup.exe)

2. 파일을 설치합니다
GNUstep System  ->GNUstep Core  ->dev c++  순서로 설치하심다.

1. GNUstep System  설치1 -걍 agree


2. GNUstep System  설치2-걍 next 후 설치 화면 지지지직~~



3. GNUstep System  설치3-완료



4. GNUstep Core 설치1-역시 계속 next



5. GNUstep Core 설치2-또...지지지직~~



6. GNUstep Core 설치3- 완료



7.Dev-C++ 설치 첫번째..
얼레..이상한게 뜨네요... 그래도 걍 Go~~



8.Dev-C++ 설치 두번째.. -뭐가있는 지 살펴볼려다가 역시 귀차니즘.. 다음~



9.Dev-C++ 설치 세번째.. -완료



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

댓글을 달아 주세요

오브젝트C2010. 6. 21. 23:51
Object-C 윈도우강의 1편

http://cafe.naver.com/mcbugi/32424

안녕하세요. 맥부기 카페의 맨날 할래입니다

오늘은 상당히 괜찮은 팁을 하나 알려드리려고 합니다.

제가 그동안 써왓던 방법인데요.

여러분... 아이폰 개발을 처음 시작하시는 분이시라면...

맥북이나 매킨토시를 사실 필요가 없을것같습니다 .아무리생각해도...

Objective-C 의 Objc 프레임워크나 Foundation 프레임 워크는 윈도우 기반에서도 충분히

잘돌아가거든요.(Foundation 프레임워크 클래스들로 공부한 후 에 드리는 말씀입니다.)

기존에 카페에 여러분들께서 써놓으신 '윈도우에서 Objective-C' 개발하는 강좌같은경우

Cygwin 이나 minggw를 사용해서 objective-c 컴파일 환경을 만들어서 하는 방법인데.

이 경우에는 새로운 소스를 만들어서 컴파일 할때마다

gcc -c -Wno-import '파일네임.m' gcc -o 'exe 이름' -Wno-import 'o 파일 이름' -lobjc

뭐 이런식으로 써야하다보니....

개발하는 시간보다 .. 컴파일 철자 틀려서 다시 쓰는시간이 더걸리더라구요

그래서 ..이 귀찮음을 어떻게 극복할까..

여러가지 블로그도 보고

해외사이트도 보고 해서 ...

참 편리한 방법을 알아냈습니다

Dev-Cpp 을 이용해서 개발하면 굉장히 편하더라구요...

소스 다 짠다음에 F9 만 눌르면...

드르륵 하믄서... 컴파일되고.. 결과창 뜨고...

그래서 이팁을 여러분과 공유하기위해서 씁니다



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

댓글을 달아 주세요