티스토리 툴바


UITableView Section default margin setting

프로그래밍/iOS 2012/03/27 17:41

테이블 뷰의 섹션간 기본 margin 설정

아래값이 기본설정이 되며 각 섹션에서 셋팅하는 Header, Footer 값은 아래 값에 더해서 결정된다.

    [tableView setSectionHeaderHeight:0];

    [tableView setSectionFooterHeight:0];


posted by openmaya

iOS 5.0 기준 아이폰 기본 폰트 리스트

프로그래밍/iOS 2012/03/19 14:28
Font FamilyNames
Font Family:  Thonburi
              Thonburi-Bold
              Thonburi
Font Family:  Snell Roundhand
              SnellRoundhand-Bold
              SnellRoundhand-Black
              SnellRoundhand
Font Family:  Academy Engraved LET
              AcademyEngravedLetPlain
Font Family:  Marker Felt
              MarkerFelt-Wide
              MarkerFelt-Thin
Font Family:  Geeza Pro
              GeezaPro-Bold
              GeezaPro
Font Family:  Arial Rounded MT Bold
              ArialRoundedMTBold
Font Family:  Trebuchet MS
              TrebuchetMS
              TrebuchetMS-Bold
              TrebuchetMS-Italic
              Trebuchet-BoldItalic
Font Family:  Arial
              Arial-BoldMT
              ArialMT
              Arial-ItalicMT
              Arial-BoldItalicMT
Font Family:  Marion
              Marion-Regular
              Marion-Bold
              Marion-Italic
Font Family:  Gurmukhi MN
              GurmukhiMN
              GurmukhiMN-Bold
Font Family:  Malayalam Sangam MN
              MalayalamSangamMN-Bold
              MalayalamSangamMN
Font Family:  Bradley Hand
              BradleyHandITCTT-Bold
Font Family:  Kannada Sangam MN
              KannadaSangamMN
              KannadaSangamMN-Bold
Font Family:  Bodoni 72 Oldstyle
              BodoniSvtyTwoOSITCTT-Book
              BodoniSvtyTwoOSITCTT-Bold
              BodoniSvtyTwoOSITCTT-BookIt
Font Family:  Cochin
              Cochin
              Cochin-BoldItalic
              Cochin-Italic
              Cochin-Bold
Font Family:  Sinhala Sangam MN
              SinhalaSangamMN
              SinhalaSangamMN-Bold
Font Family:  Hiragino Kaku Gothic ProN
              HiraKakuProN-W6
              HiraKakuProN-W3
Font Family:  Papyrus
              Papyrus-Condensed
              Papyrus
Font Family:  Verdana
              Verdana
              Verdana-Bold
              Verdana-BoldItalic
              Verdana-Italic
Font Family:  Zapf Dingbats
              ZapfDingbatsITC
Font Family:  Courier
              Courier-Bold
              Courier
              Courier-BoldOblique
              Courier-Oblique
Font Family:  Hoefler Text
              HoeflerText-Black
              HoeflerText-Italic
              HoeflerText-Regular
              HoeflerText-BlackItalic
Font Family:  Euphemia UCAS
              EuphemiaUCAS-Bold
              EuphemiaUCAS
              EuphemiaUCAS-Italic
Font Family:  Helvetica
              Helvetica-LightOblique
              Helvetica
              Helvetica-Oblique
              Helvetica-BoldOblique
              Helvetica-Bold
              Helvetica-Light
Font Family:  Hiragino Mincho ProN
              HiraMinProN-W3
              HiraMinProN-W6
Font Family:  Bodoni Ornaments
              BodoniOrnamentsITCTT
Font Family:  Apple Color Emoji
              AppleColorEmoji
Font Family:  Optima
              Optima-ExtraBlack
              Optima-Italic
              Optima-Regular
              Optima-BoldItalic
              Optima-Bold
Font Family:  Gujarati Sangam MN
              GujaratiSangamMN
              GujaratiSangamMN-Bold
Font Family:  Devanagari Sangam MN
              DevanagariSangamMN
              DevanagariSangamMN-Bold
Font Family:  Times New Roman
              TimesNewRomanPS-ItalicMT
              TimesNewRomanPS-BoldMT
              TimesNewRomanPSMT
              TimesNewRomanPS-BoldItalicMT
Font Family:  Kailasa
              Kailasa
              Kailasa-Bold
Font Family:  Telugu Sangam MN
              TeluguSangamMN-Bold
              TeluguSangamMN
Font Family:  Heiti SC
              STHeitiSC-Medium
              STHeitiSC-Light
Font Family:  Futura
              Futura-Medium
              Futura-CondensedExtraBold
              Futura-CondensedMedium
              Futura-MediumItalic
Font Family:  Bodoni 72
              BodoniSvtyTwoITCTT-BookIta
              BodoniSvtyTwoITCTT-Book
              BodoniSvtyTwoITCTT-Bold
Font Family:  Baskerville
              Baskerville-SemiBoldItalic
              Baskerville-Bold
              Baskerville-Italic
              Baskerville-BoldItalic
              Baskerville-SemiBold
              Baskerville
Font Family:  Chalkboard SE
              ChalkboardSE-Regular
              ChalkboardSE-Bold
              ChalkboardSE-Light
Font Family:  Heiti TC
              STHeitiTC-Medium
              STHeitiTC-Light
Font Family:  Copperplate
              Copperplate
              Copperplate-Light
              Copperplate-Bold
Font Family:  Party LET
              PartyLetPlain
Font Family:  American Typewriter
              AmericanTypewriter-CondensedLight
              AmericanTypewriter-Light
              AmericanTypewriter-Bold
              AmericanTypewriter
              AmericanTypewriter-CondensedBold
              AmericanTypewriter-Condensed
Font Family:  AppleGothic
              AppleGothic
Font Family:  Bangla Sangam MN
              BanglaSangamMN-Bold
              BanglaSangamMN
Font Family:  Noteworthy
              Noteworthy-Light
              Noteworthy-Bold
Font Family:  Zapfino
              Zapfino
Font Family:  Tamil Sangam MN
              TamilSangamMN
              TamilSangamMN-Bold
Font Family:  DB LCD Temp
              DBLCDTempBlack
Font Family:  Arial Hebrew
              ArialHebrew
              ArialHebrew-Bold
Font Family:  Chalkduster
              Chalkduster
Font Family:  Georgia
              Georgia-Italic
              Georgia-BoldItalic
              Georgia-Bold
              Georgia
Font Family:  Helvetica Neue
              HelveticaNeue-Bold
              HelveticaNeue-CondensedBlack
              HelveticaNeue-Medium
              HelveticaNeue
              HelveticaNeue-Light
              HelveticaNeue-CondensedBold
              HelveticaNeue-LightItalic
              HelveticaNeue-UltraLightItalic
              HelveticaNeue-UltraLight
              HelveticaNeue-BoldItalic
              HelveticaNeue-Italic
Font Family:  Gill Sans
              GillSans-LightItalic
              GillSans-BoldItalic
              GillSans-Italic
              GillSans
              GillSans-Bold
              GillSans-Light
Font Family:  Palatino
              Palatino-Roman
              Palatino-Bold
              Palatino-BoldItalic
              Palatino-Italic
Font Family:  Courier New
              CourierNewPSMT
              CourierNewPS-BoldMT
              CourierNewPS-BoldItalicMT
              CourierNewPS-ItalicMT
Font Family:  Oriya Sangam MN
              OriyaSangamMN-Bold
              OriyaSangamMN
Font Family:  Didot
              Didot-Italic
              Didot
              Didot-Bold
Font Family:  Bodoni 72 Smallcaps
              BodoniSvtyTwoSCITCTT-Book
posted by openmaya

아이폰 폰트 출력 이디엄 코드

프로그래밍/iOS 2012/03/19 12:12

    NSArray *names = [UIFont familyNames];

NSArray *fontFaces;

NSLog(@"Font FamilyNames");

for (NSString *name in names) {

NSLog(@"Font Family:  %@",name);

fontFaces = [UIFont fontNamesForFamilyName:name];

for (NSString *fname in fontFaces) {

NSLog(@"              %@",fname);

}

}


posted by openmaya

싱글턴 클래스의 구현

프로그래밍/Objective-C 2012/03/14 10:25
출처 : 애플개발자 문서 - Cocoa Fundamentals Guide - Cocoa Object - Creating a Singleton Instance 

싱글턴 객체 : MyGizmoClass
인스턴스를 얻기위한 메서드 : sharedManager
alloc이나 init을 이용한 생성시에도 이미 생성된 인스턴스를 돌려주기 위해 allocWithZone과 copyWithZone 메서드를 아래와 같이 구현한다.

장점 :
- 팩토리 클래스나 메서드를 새로 선언하지 않아도 일반 클래스 사용하듯 싱글턴 사용
- 기존에 구현된 클래스를 싱글턴으로 변경하는 경우 기존코드의 변경없이 해당 클래스의 변경만으로 가능

단점 :
 - 만든 당사자가 아니면 싱글턴인지 알수 없을수도 있
 - 테스트하기 쉬운코드인지는 좀더 사용해보고 판단할일

추가적인것은 더 개발을 해봐야 알수 있을것 같음


static MyGizmoClass *sharedGizmoManager = nil;
 
+ (MyGizmoClass*)sharedManager
{
    if (sharedGizmoManager == nil) {
        sharedGizmoManager = [[super allocWithZone:NULL] init];
    }
    return sharedGizmoManager;
}
 
+ (id)allocWithZone:(NSZone *)zone
{
    return [[self sharedManager] retain];
}
 
- (id)copyWithZone:(NSZone *)zone
{
    return self;
}
 
- (id)retain
{
    return self;
}
 
- (NSUInteger)retainCount
{
    return NSUIntegerMax;  //denotes an object that cannot be released
}
 
- (void)release
{
    //do nothing
}
 
- (id)autorelease
{
    return self;
}

posted by openmaya

iOS 지역화 그리고 xcode 4.2에서 Localizable.strings추가하기

분류없음 2012/02/21 14:07
여기 설명된 문서는 애플 개발자 문서 Resource Programming Guide를 참조하여 작성하였다.
지역화에 대해 공부하고 필요한 내용과 제목과 같은 문제를 만나 해결한 과정을 공유 하고자 한다.

1. 지역화

Xcode에서 사용자 계정의 언어설정에 따라서 표시되는 메시지를 각 언어 설정에 맞게 표시할수 있다.
소스 코드상에 있는 NSLocalizationString과 같은 매크로등을 이용해 메시지를 genstrings명령을 이용해 strings파일(확장자가 .strings) 로 추출할수 있다.
또는 사용자가 아래와 같이 직접 작성할 수도 있다. 아래는 영어인 경우이다. 보시다시피  C스타일의 키=값의 형식으로 되어있고 어차피 영어라 키와 값이 같다.

출처 : xcode 개발자 페이지 Localizing String Resource

/* Insert Element menu item */
"Insert Element" = "Insert Element";
/* Error string used for unknown error types. */
"ErrorString_1" = "An unknown error occurred.";

이렇게 작성한 stings파일에서 실제 값을 불러올수 있도록 하는 몇가지 매크로들이 있는데, Foundation에서 제공하는것과 CoreFoundation에서 제공하는 것들이 있다.

  • Core Foundation macros:

    • CFCopyLocalizedString

    • CFCopyLocalizedStringFromTable

    • CFCopyLocalizedStringFromTableInBundle

    • CFCopyLocalizedStringWithDefaultValue

  • Foundation macros:

    • NSLocalizedString

    • NSLocalizedStringFromTable

    • NSLocalizedStringFromTableInBundle

    • NSLocalizedStringWithDefaultValue



각 매크로들의 자세한 설명은 레퍼런스를 참조하고 우선 각각 맨위의 매크로들(CFCopyLocalizedString, NSLocalizedString)은 기본적으로 Localizable.strings파일에서 읽어도록 되어있다.
아래의 FromTable이라는 이름이 붙은 매크로들은 사용자가 임의로 지정한 strings파일명으로 Localizable.strings가 아닌 직접 지정하여 생성한 파일을 읽어올수도 있다.
이 글에서는 맨위의 함수만을 테스트 해보았다.


2. Localizable.strings 파일 추가하기

문제는 이 파일을 생성하더라도 프로젝트에 어떻게 추가 하느냐에서 많은 시간이 걸렸다.

기본적으로 프로젝트 소스 디렉토리 하위에 언어 코드 두자리(국가코드 참조 : http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)로된 언어 프로젝트 디렉토리를 생성하고,
(예를 들면 한국어인경우 kr.lproj 라는 디렉토리 생성) 하위에 해당 파일을 넣으면 된다.

문제는 요게 xcode에서 인식하도록 하는게 관건이다.

인터넷에 많은 설명이 있지만 화면캡쳐도 이전 xocde기준이었고 xcode4.2에 관해서는 설명이 부족했다.
먼저 공통적으로 따라갈수 있는 순서는 아래와 같다.

xcode의 프로젝트 네비게이터(왼쪽 첫번째탭) 영역에서 프로젝트를 선택 -> info선택 -> Localization에서 korean추가 -> Finder에서 프로젝트 소스 디렉토리에 가면 en.lproj와 ko.lproj 디렉토리 생성확인(xcode에서 자동생성)

대부분의 경우 하위 디렉토리에 strings파일을 넣기만 하면 된다거나(http://coderush-textcube.blogspot.com/2010/01/iphone-app-localization.html) ,
위의 info 설정에서 언어를 추가하면 자동으로 생성이 된다고 적혀있다.

하지만, 초기부터 xib, nib가 있거나 지역화를 고려하고 시작한게 아니라면 디렉토리도 없을 뿐더러, finder에서 직접 넣더라도, xcode 에서 인식도 안되고 실제 시뮬레이터의 언어설정을 바꾸더라도 매크로를 통해 로딩되지 않는다.

그래서 해결방법은 아래와 같다.

1. 소스디렉토리 루트(위 까지 따라했다면 en.lproj 디렉토리 바로 상위가 되겠다.) 에 기본 Localizable.strings 파일을 생성(영어)
2. xcode에서 적당한 위치(Resource 그룹을 생성해도 좋고 Supported Files 그룹하위도 좋다. 사용자 맘) 에서 마우스 오른쪽 버튼을 눌러 "Add to files 그룹명"선택
3. Localizable.strings 파일 선택
4. 좌측 xcode 프로젝트 네비게이터에서 추가한 strings파일을 선택하면 오른쪽 상단의 파일 인스펙터가 자동으로 선택되는데(선택이 안되었다면 첫번째 탭 선택), 그 두번째 항목에 Localization 항목이 있다.
5. +버튼을 누르고 영어와 한국어를 추가한다. finder에서 루트 디렉토리를 확인해보면 위에서 언급한 ko.lproj하위에 Localizable.strings가 추가되어있음을 확인할수 있다. 이 파일을 수정하면 된다.

파일 인스펙터 그림

 


posted by openmaya

Overwrite(덮어쓰기) 되는 Instance Variable(인스턴스 변수)의 메모리 관리

프로그래밍/Objective-C 2012/02/16 18:45
일단 문제의 코드를 보자
....
if (nil != mSelectedImage) 
{
        [mSelectedImage release];

}
mSelectedImage = [aSelectedImage retain];
....
풀어서 이야기 하자면 선택된 이미지가 nil이 아니면(이전에 선택되었던 이미지가 있었다면) 해당 이미지는 release하고, 새로 선택한 이미지를 할당 하자는 이야기다.

일단 첫번째 문제는 nil이 아닌지 여부는 아래와 같이 쉽게 바꿔도 무방하다.
...
if (mSelectedImage) {
...
두번째 문제는 release라는 메시지를 보내는 것인데, 사실 mSelectedImage가 nil이어도 메시지를 보낼수 있고 객체가 nil을 받는경우 nil을 리턴한다는 성질을 이용한다면 사실 if문자체가 특별히 의미도 없을뿐더러 불필요한 연산을 수행하게 된다.

여기까지 코드를 정리하자면 아래와 같다.
...
[mSelectedImage release];
mSelectedImage = [aSelectedImage retain]; 
...
세번째 문제는 aSelectedImage와 mSelectedImage가 같은 객체일경우에 발생한다.
mSelectedImage가 이미 할당되어있고 aSelectedImage가 같은 이미지로 입력이 들어왔다고 할때
마지막 코드의 첫번째줄에서 mSelectedImage는 이미 nil이 되었고, 두번째 코드에서는 nil에 메시지를 날린 격이므로, 결과적으로는 nil이 할당된다.

아마 사용자는 현재 이미지를 선택했으므로 그냥 현재 이미지를 표시해주면 되는데, 어이없게 화면에서 선택한 이미지가 나오지 않는 상황을 만나게 된다.

이 문제를 해결하는 방법은 아래와 같다.
...
[mSelectedImage autorelease];
mSelectedImage = [aSelectedImage retain];
...
중첨되는 변수사용시 앱이 죽는 경우는 이제좀 모면했으려나


 
posted by openmaya

Objective-C 인스턴스 변수의 범위(The Scope of Instance Variables)

프로그래밍/단순번역 2012/02/08 12:46
이 글은 애플 개발자 문서를 단순 번역 한것입니다.
링크를 걸수 없어 출처는 아래 경로로 공유 합니다.

The Objective-C Programming Language -> Defining a Class -> Class Implementation -> The Scope of instance variables
----------------------------------

The Scope of Instance Variables
인스턴스 변수의 범위
객체의 데이터를 숨기기 위한 능력을 강제하기 위해서 컴파일러는 인스턴스 변수의 범위를 제한한다. 그것은 프로그램에서의 가시성을 제한한다.
하지만 유연하게 제공하기 위해서 네가지 레벨의 범위를 명확하게 설정할수 있도록 한다. 각 레벨은 컴파일러 지시자에 의해서 마킹된다.

@private
인스턴스 변수는 그것이 정의된 클래스 내부에서만 접근 가능하다
->  code asist에 노출되나 
@protected
인턴스 변수는 그것이 정의 된 클래스와 그것을 상속받는 클래스에서 접근가능하다.
모든 명확히 범위 지시자가 없는 인스턴스 변수는  @protected  범위를 갖는다.
@public
인스턴스 변수는 모든곳에서 접근 가능하다.
-> 를 통해 접근 가능
@package
현대 런타입을 사용하는 곳에서 @package 인스턴스 변수는 클래스가 구현된 실행 이미지 안에서 @public의 범위를 같지만, 실행은 @private 밖을 좋아한다.?

Objective-C 인스턴스 변수를 위한 @package 변수는 c의 변수와 함수를 위한 private_extern와 유사하다. 인스턴스 변수를 사용하길 시도하는 클래스가 구현된 이미지의 바깥의 어느 코드도 링크에러를 가진다.

이 범위는 프레임웤 클래스의 인스턴스 변수에게 가장 유용하다. where @privae은 너무 제한적이고, @protected또는 @public너무 범위가 넚다



번위 제한 지시자는 그것이 나타난 이후의 인스턴스 변수에 적용되는데 다음 디렉티브가 나오거나 리스트의 끝이 올때까지 적용된다.

@interface Worker : NSObject
{
    char *name;
@private
    int age;
    char *evaluation;
@protected
    id job;
    float wage;
@public
    id boss;
}


기본적으로 모든 표시 없는 변수들은 @protected이다.
클래스에 정의된 모든 인스턴스 변수들은 마킹에 상관없이 클래스 정의 범위 안에 있다.
예를 들어 job이라는 인스턴스 변수를 정의한 worker리나느 클래스가 아래 있고 메서드정의에서 아래와 같이 참조할수 있다.

명백하게, 클래스가 자신의 인스턴스 변수에 접근할수 없었다면 인스턴스 변수는 어떤 것도 사용되지 않았어야 한다.

일반적으로 클래스는 또한 그것을 상속한 인스턴스 변수에 접근할수 있었다. 
인스턴스 변수를 참조하는 능력은 일반적으로 가변성과는 달리 상속된다.
그들의 범위안에 전체의 데이터 구조를 가지는 클래스 들과 의미가 통하는데, 특히 당신이 그저 어디로부터 상속하는지 클래스에 대한 고심으로서 클래스 정의에 대해 생각하면 그렇다.  위에 설명된 promoteTo 메서드는 worker클래스로부터 job인스턴스 변수를 상속받는 어떠한 클래스에 정의 될수도 있다.

그러나, 왜 당신이 인스턴스변수에 직접적으로 접근하는 것으로 부터 엄격한 클래스 상속을 원할지에 대한 이유가 여기 있다.
- 한번 하위 클래스가 상속된 인스턴스 변수에 접근하면, 변수를 정의한 클래스는 구현된 부분에 묶인다. 이후 버전에서. 그것은 변수를 제거할수 없거나  하위 클래스를 무심코 부시지 않고 그것의 역할을 변경할수 없다.
- 게다가 하위 클래스가 상속된 변수를 접근하고 값을 바꾸면, 무심코 해당 변수가 선언된 클래스에 버그를 발생시키는데, 특히 변수가 클래스 내부에 의존성이 있는 경우 그렇다.

인스턴스 변수의 범위의 제한이 그것이 정의된 클래스안으로 정의 되기 위해서 당신은 @private 마크를 해야한다. @private 바킹된 인스턴스 변수는 public접근 메서드의 호출에 의해 하위클레스에서 접근가능하다. 

다른 예제로 @Public이 마킹된 변수는 일반적으로 심지어 그 변수를 정의하고 상속한 클래스 정의의 바깥에서도 사용가능하다.
보통, 인스턴스 변수에 저장된 정보를 얻기위해서 다른 객체는 그것을 요청하는 메시지를 보내야 한다. 하지만, public 인스터스 변수는 C 스트럭쳐 안의 필드로서 어느곳에서도 접근된다. 예제는 아래와 같다.

- promoteTo:newPosition
{
    id old = job;
    job = newPosition;
    return old;
}

객체는 반드시 타입이 정적으로 명시 되어 있어야 한다.

@public으로 마킹된 인스턴스 변수는 객체가 데이터를 은닉하는 능력을 무력화한다. 그것은 OOP의 기본 정책(뷰와 우연한 에러로부터 보호되는 객체 안의 데이타 캡슐화)을 위반한다 public 인스턴스 변수는 그래서 희귀한 케이스를 제외하고 피해야만 한다.


 
posted by openmaya

objective-c class 변수(variable) 선언

프로그래밍/Objective-C 2012/02/06 16:02
Java에서는 static 지시자를 통해 클래스 변수를 선언하였으나 Objective-c에서는 특별히 클래스 변수라는 것이 존재하지 않는다.
그럼 어떻게 구현해야 할까? 결론적으로 말하자면, static지시자가 존재하고 이것의 속성을 통해 우회하여 구현할수는 있다. ㅎ

먼저 Java에서 static이 어떤 역할을 하는지 정리해 보자.


1. 클래스가 내부에서 만 접근가능
2. 해당 클래스의 인스턴스들에서 공통적으로 접근 가능
3. 클래스 메서드(java에서 static메서드)를 통해서 해당 변수에 접근이 가능하다.
4. protected로 선언하는 경우 상속이 가능


Objective-c에서 "static" 변수 선언은 아래와 같은 기능을 한다.


1. 범위 : 선언된 클래스 내부로 한정되며, 정확히는 해당 선언이 있는 클래스 파일 내부로 한정된다.
2. 상속할수 없고, 하위 클래스에서 직접 접근할수 없다.
3. static을 통하지 않고서라도 external변수를 사용해서도 가능하다, 하지만 static객체의 제한된 범위는 각각의 구분된 객체 안에서 캡슐화 하는 목적에 좀더 알맞는다.

출처 : https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-BAJCDADF
 Variables and Class Objects 항목 참조


위의 사실로 미루어 볼때 아래와 같이 구현하면 상속은 못하더라도 원하는 구현은 할수 있다.


* .m 파일에 static변수를 선언
* 초기 값을 가지게 하고 싶다면 클래스 초기화시 동작하는 클래스 메서드 +(void) initialize 함수를 통해  해당 static 변수를 초기화 할수 있다.
* 기타 클래스 메서드 구현을 통해 static 변수에 접근할 수 있다는 이야기. ㅎ


참고 : 싱글턴 인스턴스 작성하기
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html
최하단 : Creating a Singleton Instance 참조

 
posted by openmaya

Objective-C @class directive(지시자)에 관하여

프로그래밍/Objective-C 2012/02/03 11:50
@class라는 지시자가 있고 언뜻보면 #import 대신에 클래스 명으로 간편하게 사용할수 있을것 처럼 보인다.
하지만 실제로는 파라미터로 간단히 사용할때나, 중복  include로 인한 잠재적인 문제를 줄여주기 위한 목적으로 사용한다고 한다.

사용 범위는 메서드의 파라미터의 타입으로서 해당 클래스을 사용할때뿐인것 같다.
만약 리턴값으로 해당 값을 사용하거나, 인스턴스변수로 사용할때,  파라미터로 넘어올때 해당 객체 안의 값을 가져오는경우(실제로를 getter  메시지를 호출)에는 #import를 사용해야만 한다.

애플 문서내용은 아래와 같다.
 

-------------------------------------------------
원문
 
https://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocDefiningClasses.html

번역 :
 
인터페이스 파일은 클래스를 정의하고 그것의 상위 클래스를 포함함으로서, 암암리에 모든 상속받은 클래스들을 위한 정의들을 포함하는데,  NSObject로부터 그것의 상위 클래스를 통과해 내려온다.
인터페이스가 이러한 계층구조가 아닌 클래스들을 언급하다면 그것들을 정확하게 import해야 하고 @class안에 정의 되어야 한다.

@class Rectangle, Circle;

이 지시자는 단순히 Rectangle, Circle이 클래스 이름이라는 것을 클래스에 알려준다.
인터페이스 파일들은 import하지 않는다.
인터페이스 파일은 그것이 정적으로 인스턴스 변수, 리턴값, 그리고 파라미터로서 기술될때 클래스 이름을 언급한다.
예를 들면 아래와 같이 사용될때 NSColor 클래를 언급한다.
- (void)setPrimaryColor:(NSColor *)aColor;
이러한 정의는 타입으로서 간단하게 사용하고 클래스 인터페이스의 어떠한 자세한사항(메서드와 인스턴스 변수)에는 의존하지 않기때문에 @class 지시자는 어떤일이 발생할지 컴파일러에게 충분한 사전경고를 준다. 그러나, 클래스를 위한 인터페이스가 실제로 사용될때(인스턴스 생성, 메세지 전송/메서드 호출), 클래스 인터페이스는 반드시 import 되어야 한다.
  보통 인터페이스 파일은 클래스들의 정의를 위해 @class를 사용하고,  상응하는 구현 파일은 그들의 인터페이스 파일을 import한다(비록 그 클래스들의 인스턴스를 생성할 필요가 있고, 메시지를 보내는 경우)

@class 지시자는 컴파일러와 링커에 의해 노출되는 코드량을 줄여주고 클래스 이름을 선적용하게 해주는 가장 심플한 방법이다.  심플하게 되는것은 여전히 다른 파일들을 import한 파일들을 포함하는것으로 부터 올지모르는 잠재적인 문제를 줄여준다. 예를 들면 하나의 클래스가 또다른 클래스의 정적으로 입력된 인스턴스 변수를 정의 했다면, 또그들의 두개의 인터페이스 파일을 각각 다른 것들을 import하고 있을때, 어떤 클래스도 정상적으로 컴파일 되지 않는다.

 
posted by openmaya

iOS http 통신하는 법

프로그래밍/Objective-C 2012/02/01 18:59
제목은 저렇게 썼지만, 간단히 GET방식으로 URL 호출해서 결과 html만 받고 싶은 경우가 있다.

아래 예제 ㅎ

    NSURL *url = [NSURL URLWithString:keyUrl];

    NSString * result = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"result : %@", result);



업로드라던가 POST방식을 원하신다면, 아래의 과정을 따라서, 쉽지는 않습니다. ㅎ
내일은 요걸 공부해 봐야겠네요 ㅎ
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-170129

 
posted by openmaya
1 2 3 4 5 ... 9