외규장각 도서 환수 모금 캠페인

'APP'에 해당되는 글 3건

  1. 2010.08.05 소스 완전 사이트
  2. 2010.04.06 Objective - C 기본 문법 총정리
  3. 2010.04.06 objective - c #1

<push notification service 관련 provider>

http://code.google.com/p/apns-php/


<web 게시판과 연동>

http://code.google.com/p/cozymood/


http://cocoadev.tistory.com/#recentTrackback에서 공개한 내용임.

      *  이미지 편집 함수 모음( 스케일, 회전, crop )

  • 다양한 UI 구현
  • 테이블뷰셀 커스터마이징
  • HTTP GET/POST 요청
  • XML 파싱
  • 사진 앨범, 카메라, 지도 이미지 접근
  • 맵뷰 위치정보
  • 푸시 노티피케이션


<여러 UI 모음: photo viewer, etc>

http://github.com/facebook/three20 (초기에는 facebook 어플이었으나 현재는 여러 UI 모음으로 바뀜 )


<map>

http://code.google.com/p/route-me/


<E-mail>

http://code.google.com/p/remail-iphone/

http://code.google.com/p/skpsmtpmessage/

 

<그래프>

http://code.google.com/p/core-plot/

 

<달력>

http://ved-dimensions.blogspot.com/2009/04/iphone-development-creating-native_09.html


<sqlite>

http://code.google.com/p/pldatabase/ (BSD license)

http://code.google.com/p/flycode/source/checkout  (class rapper)


<계산기>

http://code.google.com/p/hpcalc-iphone/ (GPL V2 license)


<트위터 클라이언트>

http://github.com/blog/329-natsuliphone-iphone-twitter-client

http://code.google.com/p/tweetero/


<facebook>

http://github.com/facebook/facebook-iphone-sdk


<rss reader>

http://code.google.com/p/iphone-simple-rss-aggregator/


<ebook reader>

http://code.google.com/p/iphoneebooks/


<blog>

http://iphone.wordpress.org/


<백업, 동기화>

http://www.funambol.com/solutions/iphone.php

http://code.google.com/p/gris/ (구글 리더 동기화)


<time tracking>

http://github.com/freshbooks-addons/freshbooks-iphone-project


<게임>

http://code.google.com/p/cocos2d-iphone/

http://code.google.com/p/tris/ (테트리스)

http://code.google.com/p/mintgostop/ (고스톱)

http://www.joystiq.com/2009/03/24/carmack-releases-open-source-wolfenstein-for-iphone/

 

<google toolbox>

http://code.google.com/p/google-toolbox-for-mac/


<택배>

http://kldp.net/projects/taekbae/src

 

<이미지 프로세싱>

http://code.google.com/p/simple-iphone-image-processing/


<증강현실>

http://www.iphonear.org/


<coverflow 대체 구현>

http://apparentlogic.com/openflow/

http://www.chaosinmotion.com/flowcover.m (매가박스 어플에서 참고함)


<정규표현식 라이브러리>

http://blog.mro.name/2009/09/cocoa-wrapped-regexh/

http://regexkit.sourceforge.net/RegexKitLite/


<라이브러리 : JSON, DOM XML, Google Data APIs, Twitter, Flick, Game Engines, Unit Testr>

http://www.codingventures.com/2008/12/useful-open-source-libraries-for-iphone-development/


<기타>

http://open.iphonedev.com/

http://joehewitt.com/post/the-three20-project/

[출처] iPhone Open Source 모음  (맥부기 아이폰(iPhone)OS 개발자모임) |작성자 낙수

Posted by 닉네임영역
,

1. Messages

메시지 전송할 때 사용됩니다. ”[ ]”로 싸서 표현합니다.

[receiver message]

receiver는 변수, 자기자신, 클래스 이름등 사용 가능하며  메시지는 receiver에게 무엇이든 전달할 수 있다.

 

2. Defined Types

Objective-C에서 사용되는 주요 타입은 “objc/objc.h”에 정의되어 있다.

타입

정의

id

객체를 가리킴. 인스턴스에 대한 포인터

Class

클래스 자체에 대한 포인터

SEL

메소드의 이름을 선택하기 위한 선택자, 이름과 모든 콜론(;)을 포함

IMP

id를 리턴하는 메소드의 구현부에 대한 포인터

BOOL

이진값. YES 또는 NO

Nill

Null object

 

Preprocessor Directive(전처리기 지시자)

#import

.h 헤더파일을 import

#include

.h 헤더파일을 include(#import와는 달리 여러 번 수행됨)

//

주석(comment)

 

3. Compiler Directive

Complier 지시자는 “@”로 시작한다.

 

다음은 classes, categories, and protocols의 선언과 정의에 쓰이는 지시자이다.

Directive

정의

@interface

class 또는 카테고리 interface의 선언 시작

@implementation

class 또는 카테고리의 선언 시작

@protocol

형식 프토토콜 선언 시작

@end

Class, category 또는 protocol의 선언/정의를 끝낸다.


다음은 instance변수들의 visibility를 설명한 상호 배타적인 지시자이다.

Directive

정의

@private

instance변수의 범위를 그것이 선언된 class로 한정한다.

@protected

instance변수의 범위를 선언되고, 상속된 class로 한정한다.

@public

instance변수의 범위에 대한 제한을 없앤다.

 

다음은 exception handling을 지원하는 지시자이다.

Directive

정의

@try

Exceptions이 던져질 수 있는 block을 정의한다.

@throw

Exception object를 던진다.

@catch()

@try bolck안에서 던져진 exception을 catch한다.

@finally

@try block에서 Exceptions가 던져지던 아니던 수행되어질 block code를 정의한다.

 

다음은 declared properties feature를 지원하는 지시자이다.

Directive

정의

@property

Declared property의 선언을 시작한다.

@synthesize

Compiler에 custom implementations이 없는 accessor methods를 생성하도록 요청한다.

@dynamic

만약 이름이 따르는 properties와 관련있는 acessor methods의 implementation을 발견하지 못하면 compiler에게 warning을 생성하지 않도록 지시한다.

 

추가적으로 특별한 목적을 위한 지시자들이 있다.

Directive

정의

@class

다는 곳에서 정의된 class들의 이름을 선언한다.

@selector(method_name)

Method_name을 식별하는 compiled selector를 리턴한다.

@protocol(protocol_name)

protocol_name protocol을 리턴한다.(protocol class의 instance).

(@procotol은 forward declarations를 위해서는 (protocol_name)없이도 유효하다.

@encode

type_spec의 type structure를 encode한 char string을 가져온다.

@"string"

현재 모듈에서 Constant NSString object를 정의하고, 주어진 스트링으로 object를 초기화 한다.

MAX OS X v10.4와 이전, string은 7-bit ASCII-encoded 이어야 한다.

MAX OS v 10.5와 이후(Xcode 3.0과 이후), UTF-16 encoded string을 사용할 수 있다.

(MAC OS v10.2와 이후는 UTF-16encoded string을 지원한다. 그래서 MAC OS X v10.2와 이후에서 만약 app를compile하기 위해 MAC OS X v10.5를 사용하면, UTF-16 encoded string을 사용할 수 있다.)

@"string1" @"string2" ... @"stringN"

현재 모듈에서 constant NSString object를 정의한다.

생성된 string은 두지시자에서설명된 string을 연결한 결과이다.

@synchronized()

한번에 한 thread에 의해서만 실행되어져야 하는 code의 block을 정의한다.

 

4. Class

@interface 지시자로 선언된다.

#import "ItsSuperclass.h"
 @interface ClassName : ItsSuperclass < protocol_list > {
    instance variable declarations
}
method declarations
@end

 
자기 소유의 interface를 import할 때 선언하는 class.

#import "ClassName.h"
 
@implementation ClassName
method definitions
@end

 

5. Categories

Class와 동일하게 작성된다.

#import "ClassName.h"
@interface ClassName ( CategoryName ) < protocol list >
method declarations
@end

 

#import "CategoryName.h" 
@implementation ClassName ( CategoryName )
method definitions
@end

 

6. Formal Protocols(형식 프로토콜)

@protocol 지시자로 선언된다.

@protocol ProtocolName < protocol list >
declarations of required methods
@optional
declarations of optional methods
@required
declarations of required methods
@end

 

@optional 다음 method가 optional이란 걸 설명한다.

@required 다음 method가 protocol을 채택한 class에 의해 implement되어야 함을 설명한다. Default값

@protocol ProtocolName protocol에 대한 forward reference를 만든다.

@protocol ProtocolName;

 

소스내에서 protocol은 @protocol(protocol_name)와 비슷하게 사용되어 참조된다.

<protocol name list>는 다음 세가지 용도로 쓰인다.

- protocol 선언에서 다른 protocol들을 합치기 위해

- class나 category 선언에서, protocol을 채택하기 위해

- type 상술에서, type을 protocol을 따르게 하는 object에 한정하기 위해

Type Qualifier

정의

oneway

Method는 비동기적 메시지를 위한 것이고, 유효한 리턴타입를 가지지 않는다.

in

Argument는 remote receiver에 information을 pass한다.

out

Argument는 Reference에 의해 리턴된 정보를 get한다.

inout

Argument는 Information을 pass하고, get한다.

bycopy

Proxy가 아닌, Object의 copy로 pass나 return되어야 한다.

byref

현재 모듈에서 constant NSString object를 정의한다.

생성된 string은 두지시자에서설명된 string을 연결한 결과이다.

@synchronized()

Copy가 아닌 Object에 대한 reference로 pass나 return되어야 한다.

 

7. Method 선언

“+” class method 선언

“-” instance method 선언

Argument와 리턴 타입은 C문법에서의 type casting하는 방법으로 선언된다.

Argument는 “:”다음에 선언된다.

- (void)setWidth:(int)newWidth height:(int)newHeight

동일한 선언

- (void)setWidthAndHeight:(int)newWidth :(int)newHeight

 

8. Method Implementations

각각의 method implementation은 두개의 숨겨진 인자가 넘겨진다.

- receving object(self)

- method selector(_cmd)

유효한 다른 리턴을 갖지 않은 Method는 전형적으로 void를 리턴한다.

 

9. Deprecation Syntax

@interface SomeClass
-method __attribute__((deprecated));
@end

또는

#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE;  // or some other deployment-target-specific macro
@end

Objective-C 2.0 이후 버전에서만 적용됩니다.

 

10. Naming Conventions(규칙,틀)

Class, category, and protocol 이름을 대문자로, Methods, instance variables은 소문자로 시작

“_”로 시작하는 method는 Apply에서 사용되어지도록 예약된 것임

같은 클래스의 Protocol, category는 protected name space를 가지고 있어,

Protocol은 class, category, 그 밖의 것과 같은 이름을 가질 수 있고,

한 class의 Category는 다른 class의 category와 같은 이름을 가질 수 있다.

Class name은 global variables나 defined type 처럼 같은 name space를 가지고 있어,

프로그램은 class와 같은 이름의 global variables를 가질 수 없다.

출처 : http://www.howapp.com

Posted by 닉네임영역
,

1 . Objective-C란 ?

Objective-C는 미국의 브래드 콕 (Brad Cox)씨가 1986년 처음으로 개념을 발표하고 만든 하이브리드 언어 입니다.
많은 부분이 C와 유사하고 약간의 객체지향적인 부분을 합쳐서 만든 언어 입니다.
주로 스몰톡의 객체지향적인 부분을 합쳐서 만든언어라 C++이나 여타 컴파일러식 객체지향적인 언어에 비해
보다 더 객체지향적인 성격을 많이 가지고 있습니다.
Dynamic binding , Dynamic loading , Dynamic typying 등을 지원 다른 언어보다 월등한 유연성을 보여 줍니다.
그리고 이런 언어의 특징들 때문에 nextstep이라는 최초의 객체지향 OS에 과감하게 사용되었으며 , 이후 MacOS X에도 역시 핵심적인 부분에 채용되게됩니다.

넥스트사의 설립자인 스티브 잡스가 Objective-C에 대한 판권을 가져오고 다시 이걸  GNU에 기증하여, 지금의 GCC에도 Objective-C가 포함되게 되었습니다.
뛰어난 능력을 가지고, 쉽게 구할수 있음에도 불구하고 국내에는 Objective-C에 대한 자세한 입문서나 프로그래밈 가이드가 없고 , 관심을 가지고 있는 분들도 적어서 많은 장점들이 알려지지 못하고 별로 쓰이지 않는 언어로 남아있습니다.


2. 간단한 문법

 
#include
// @ 예약어
@interface Sample : Object {            // 선언
   @public            // 슈퍼 클래스                                               
     id pub;
   @protected
     int pro ;
   @private
     int pri;
}
+(id)new;                                         // ' + ' : 클래스 메소드
-(id)init;                                           // ' - ' : 인스턴스 메소드
-(int)sample;                                    // ' ( ) ' : 리턴 타입
-(id)sample : (id)arg ;
@end                                               // 정의 끝
                                                       // data type ' id ' : 인스턴스를 의미하는 data type 
                                                                                  클래스에 대한 포인터 값 가진다.
@implementation Sample
+(id)new {
   id object;                                       // 인스턴스 얻는 법
   object = [self alloc];                       // id obj = [Sample alloc];
   [object init ];                                     리턴값            클래스 메소드
   return object ;                           //  &  클래스의 인스턴스
}
-(id)init {                                                     
   [super init ];                           // ' [ ] ' : 클래스와 인스턴스 메소드 호출
   return self ;                              // super : 슈퍼클래스 | self : 자기 자신
}
-(int) sample {                            // C문법 : fun(arg1, arg2) = objC문법 : [obj method: arg1 : arg2]
   return pri ;                                // 추상 클래스 { return; } <-- 이렇게만 해도 됨
}
-(id) sample : (id)arg {
   pub = arg ;
   return self;
}
@end



3. Dynamic binding , Dynamic typying , Dynamic loading
Dynamic binding은 객체의 메소드를 호출할 때 그 메소드가 뭔지를 정적으로 컴파일 시에 결정할 수 없다는 걸
의미합니다.
C++에서도 버추얼을 이용하면 동일한 기능을 수행하게 되지요. 버추얼이 아닌 C++에서 Sample.new();라고 쓴다면 new함수에 대한 포인터를 컴파일 시에 확보하게 되고 이 주소로 호출하는 동작을 합니다. (Objective-C는 모두 포인터이므로 c++를 예로 들경우 포인터라고 생각하시면 됨) 하지만 Objective-C에서는 콜하는 주소를 컴파일 할 때도 결정할 수가 없습니다. 다만 실행시간 중에 펑션이 있는 주소를 찾아서 그부분의 함수를 호출합니다.
순수하게 함수를 호출하는데 걸리는 시간은 일반적인 C++보다는 많이 걸리게됩니다만, 그차이는 그렇게 심하지 않고 유연성은 더 커집니다. 흔히 trade off라고 하는데 성능을 우선시 할것인가 아니면 유연성을 우선시 할 것인가 하는 문제죠.
나중에 언급하겠지만 빈번하게 한 메소드를 호출할 경우 IMP를 사용해서 메소드를 함수 형태로 호출할 수도 있습니다.

Dynamic typying은 데이터 타잎이 어떤 클래스인지 컴파일 시에 알수 없다는 것을 말합니다. C++같이 타입을 엄격히 체크하는 언어에서는 타잎이 반드시 일치해야 합니다만, Obejctive-C에서는 모든 인스탄스는 id일 뿐입니다. 따라서 인스탄스가 어떤 클래스의 인스탄스인지 실행하고 확인하기 전에는 알 수가 없습니다.

Dynamic loading은 클래스를 실행시간 중에 새로 넣을 수 있다는 뜻입니다. 일종의 플러그 인을 생각하시면 됩니다.


4. selector(동적 메소드 콜)

if (j < 10)
    n= @selector(new);                   // [Sample new]
else
    n= @selector (alloc);                 // [Sample alloc]

[Sample perform: n ];


5. category
    : 이미 존재하는 클래스에 새로운 메소드를 추가하기 위해 제공되는 기능이다. 이를 통하여 별도의 subclass
     
만들지 않고서도 기존의 클래스의 기능을 확장할 있다. 단, category로 새로운 instance variable을 추가할 수
      는 없고, 기존의 메소드와 name collision(이름 충돌)이 일어날 경우 category에서 새로 정의된 메소드가 그 이름
      을 가져간다는 점에 주의해야 한다

 
@interface Sample ( Cat )
-(id)cat ;
-(int)sample;
@end

@implementation Sample (Cat)
-(id) cat
{
printf ("This is category sample \n");
return self ;
}
-(int) sample
{
printf("This is Category Sample method (sample)\n");
return pri ;
}
@end

Posted by 닉네임영역
,


사랑합니다. 편안히 잠드소서