https://www.powermockup.com/ 로 접속한 후 "Download Trial"을 클릭한다




다운로드 받은 후 사용하시면 됩니다.


UI 기획하는데 유용합니다





추가로 필요한 아이템은 다운로드 받을 수 있습니다.

'Work > Windows' 카테고리의 다른 글

Power Mockup  (0) 2019.01.17

- 미리 이지버스(www.easybus.com) 사이트에서 예매.
가격은 £5.95


- 리버풀 스트리트 역 (Liverpool street station) 밖에 있는 정류장 G에서 탑승.
이 곳에 가면 유니폼입은 아저씨가 티켓 확인하고 싸인해준다.
아침이라 그런지 근처에서 막혀서 15분 늦게 옴
- Airport Bus Expree 라고 써있는 버스를 타야한다
(다른 회사 버스도 있기 때문에)
- 오전 10:35분 출발 ( 원래는 10:20분 차)


빅토리아 코치 역에서 루턴 공항까지 2:30 좀 안걸린듯
루턴공항 도착해서 먼저 스타벅스 건너편에
Easyjet 사무실이 있는데 거기에서 꼭 도장이나 확인서명을 받아야한다.
안그러면 출국하기 바로전에 Easyjet 사무실에 갔다와야 하는 상황이....
짐은 많이 안들고 가서 기내로 ㅋㅋㅋ
짐 검사하고 출국 심사하고 면세점 지나서 게이트 뜰때까지 기다리기
참고로, 도착하고 빨리 나오고 싶으면 앞번호로 셀렉트하길...
암튼 공항 도착해서 도장찍고 짐 검사하고 출국심사하고 해서 20분 안되게 걸린듯...다행이당

공항까지 급하게 가느라 찍은 사진이 없다
하지만 디테일하게 쓰려고 노력 중

2017.07.05

빅토리아 코치 역에서 루턴공항까지는 버스타고 이동
EasyBus (easybus.com​)에서 미리 예약하는게 싸다.
출발하는 날짜가 다가올수록 가격이 올라간다.
나는 버스 놓칠거 같아서 가서 끊어야지 했는데 생각한 것보다 더 나왔다. 현장에서 결제하면 £12.00
빅토리아 코치역 안에 들어가면
National Express 자동티켓발급기가 있다.
결제하고 영수증 같이 생긴 버스표가 나오면 승강장 확인하고 앞에서 기다리면 된다.
버스 타기 전에 한번 더 확인해야한다.

Unicode 문자열 조작
- (id) initWithUTF8String:(const char *)bytes
문자코드가 UTF8이고, 널 문자로 끝나는 형식의 C언어 문자열에서 정보를 복사한후 리시버를 초기화 합니다.

(const char *)UTF8String
문자 코드가 UTF-8이고, 널문자로 끝나는 형식의 C언어 문자열을 가리키는 포인터를 리턴합니다. 해제후에도 계속 사용할려면 복사 해두어야 한다.

- (NSUInteger) length
문자열의 길리를 리턴

- (unichar)characterAtIndex:(NSUInteger)index
문자열내에서 index번째에 위치하는 문자를 리턴합니다.

- (id) initWithCharacters:(const unichar *)characters length:(NSUInteger)length
characters에 있는 length문자 만큼 Unicode 문자열을 복사하여 그것이 내용이 되는 리시버를 최기화 합니다.

- (void)getCharacter:(unichar *)buffer
리시버를 표현하는 Unicode문자열이 buffer가 가리키는 메모리 영역에 쓰입니다. 부분적으로 문자열을 끊어 내려면 메소스 getCharacters:range:를 사용한다.

문자코드를 지정한 상호변환
NSASCIIStringEncoding 7비트 ASCII인코딩
NSUTF8StringEncoding 문자의 8비트 표현( UTF8)
NSMacOSRomanStringEncoding Mac OS의 인코딩
NSKoreanEUCStringEncoding 한국어 8비트 EUC인코딩
- (const char *)cStringUsingEncoding:(NSStringEncoding)encoding
지정된 문자열을 인수로 지정한 문자 코드로 변환한 C언어 문자열을 리턴합니다.

- (id) initWithData:(NSData *)data encoding:(NSStringEncoding) encoding
바이트 배열로 들어 있는 데이터를 Unicode로 변환하고, NSString 문자열로 초기화된 문자열을 초기화 합니다.

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding
문자열을 encoding으로 인코딩을 하고 그 결과를 바이트 배열이 들어 있는 NSData의 인스턴스를 리턴합니다.

- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding) encoding
인코딩한 경우에 필요한 바이트 수를 리턴합니다.

- (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding
클래스 메소드 availableStringEncoding을 사용하면 그 환경에서 이용 가능한 인코딩 방법을 알 수 있습니다.

서식에 따른 문자열 작성
- (id) initWithFormat:(NSString *)format,...
format으로 지정된 서식에 맞게 문자열을 생성하고, 그것을 내용으로 하도록 리시버를 초기화 합니다. ","로 구분해서 추가합니다. 서식 문자열은 nil이면 안됩니다.

 %@  id 
 %d, %D, %i long 
 %u, %U unsigned long
 %hi short
 %hu unsigned short
 %qi  long long  
 %qu unsigned long long
 %x, %X unsigned long printed as hexadecimal
 %o, %O unsigned long printed as octal
 %f, %e, %E, %g, %G double
 %c unsigned char as ASCII character
 %C unichar as Unicode character
 %s char * (a null-terminated C string of ASCII characters)
 %S unichar * (a null-terminated C string of Unicode characters)
 %p void * (an address printed in hexadecimal with a leading 0x)
 %% A % character


문자열 나누기 
-(NSArray *)componentsSeparatedByString:(NSString *)separator
현재 문자열을 검사하여 주어진 문자열이 나타날때마다 문자열을 분리


문자열 비교
- (NSComparisonResult)compare:(NSString *)aString
리시버와 인수의 문자열을 비교해서 결과를 리턴합니다.

- (NSComparisonResult)caseInsensitiveCompare:(NSString *) aString
영문자의 대소문자 구분을 하지 않고 문자열을 비교합니다.

- (BOOL)isEqualToString:NSString *)aString
리시버와 인수의 문자열이 같은지 확인합니다.

- (BOOL)hasPrefix:(NSString *)aString
인수의 문자열이 리시버 앞부분과 일치하는지 확인합니다.

결합
- (NSString *)strngByAppendingString:(NSString *)aString
리시버의 끝 부분에 인수의 문자열을 연결해서 임시 문자열을 만듭니다.
- (NSString *)stringByAppendingFormat:(NSString *)format, ...
인수의 서식 문자열과 그후에 계속되는 인수를 사용해서 작성된 문자열을 리시버에 연결해서 임시 문자열을 만듭니다.

부분 문자열
- (NSString *)substringToIndex:(NSUInteger)anIndex
리시버의 앞 부분부터 anIndex가 표시하는 위치의 문자까지에 해당되는 새로운 문자열을 만듭니다.

- (NSString *)substringFromIndex:(NSInteger)anIndex
리시버의 anIndex가 가리키는 위치에서 끝 문자까지에 해당하는 새로운 문자열을 만듭니다.

- (NSString *)substringWithRange:(NSRange)aRange
리시버의 aRange로 지정되는 범위에 해당하는 문자에서 새로운 문자열을 만듭니다.

검색과 치환
- (NSRange)rangeOfString:(NSString *)aString
리시버 내에서 인수로 지정한 문자열이 있으면 그위치의 길이를 구조체 NRange의 형식으로 리턴합니다. 없는 경우 NSNotFound를 리턴하게 된다.

- (NSRange)lineRangeForRange:(RRange)aRange
개행문자로 구분된 범위내에서 인수로 지정한 문자의 범위를 리턴한다.

- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement
리시버의 aRange로 표시되는 범위를 다른 문자열로 치환한 새로운 문자열을 만듭니다.

- (NSString *)stringByReplacingOccurrenceOfString:(NSString *) target withString:(NSString *)replacement
리시버에 포함된 모든 target을replacement로 치환한 새로운 문자열을 만듭니다.

lowercaseString : 모든 영문자를 소문자로 변환
uppercaseString : 모든 영문자를 대문자로 변환
capitalizedString : 단어 앞글자를 대문자로 남은 글자는 소문자로 변환

문자열 탐색
- (BOOL) matchName:(NSString *) name withRecord: (NSDictionary *)record
{
BOOL rc = NO;
NSString *firstName = nil;
NSString *lastName = nil;
NSRange range = [name rangeOfString:@" "];
if( range.location != NSNotFound) {
firstName = [name substringToIndex:range.location];
lastName = [name.substringFromIndex:range.location + 1];
}
}

대소문자 변환
NSString *name = [string lowercaseString], [string uppercaseString];

문자열 추가
NSString *parentPath;
NSString *fullPath = [parentPath stringByAppendingFormat: @"/%@", filename];


문자열 Trimming

NSString* strContents = @"    ABCD    ";
strContents = [strContents stringByTrimmingCharactersInset:[NSCharacterSet whitespaceCharacterSet]];



참조: http://autocamping.tistory.com/204

'Work > Objective-C' 카테고리의 다른 글

NSString  (0) 2012.10.26
Delegation  (0) 2012.03.23
애플리케이션 라이프 사이클  (0) 2012.03.23
String Format Specifiers  (0) 2011.09.01
메모리 해제 관련  (0) 2011.08.24

Android 1.6 프로젝트 중 errors

==============

"ACTION_MASK cannot be resolved or is not a field"

"ACTION_POINTER_DOWN cannot be resolved or is not a field"

"ACTION_POINTER_UP cannot be resolved or is not a field"

 

-> Google API 2.2로 변경 후 빌드

==============

 

android.view.MotionEvent#getX error

 

'Work > Eclipse' 카테고리의 다른 글

ACTION_MASK, ACTION_POINTER_DOWN,ACTION_POINTER_UP error  (0) 2012.09.25


- (void)applicationDidFinishLaunching:(UIApplication*)application;
   위임자에게 애플리케이션이 초기 시작 처리가 끝났다고 말해준다.

- (void)applicationWillterminate:(UIApplication*)application;
   위임자에게 애플리케이션이 종료하려 한다고 말해준다.

- (void)applicationWillResignActive:(UIApplication*)application;
   위임자에게 애플리케이션이 비활성화된다고 말해준다. 

'Work > Objective-C' 카테고리의 다른 글

NSString  (0) 2012.10.26
Delegation  (0) 2012.03.23
애플리케이션 라이프 사이클  (0) 2012.03.23
String Format Specifiers  (0) 2011.09.01
메모리 해제 관련  (0) 2011.08.24



아이폰 OS에서는 사용자가 기기의 스프링 보드(바탕화면)에 있는 아이콘을 터치함으로써 애플리케이션이 시작된다. 그리고 사용자의 애플리케이션은 UIKit프레임워크의 main() 메서드를 호출함으로써 시작된다. 이후에 UIApplicationMain()메서드가 호출되고, 이 메서드는 사용자가 작성한 코드의 applicationDidFinishLaunching: 메서드를 호출한다. 따라서 애플리케이션이 아이폰에 띄워지는 시점에서 수행되는 대부분의 초기화 코드는 위 메서드 안으로 들어가게 된다. 여기까지 오면 기본적으로 응용프로그램 로딩이 끝나게 되고 애플리케이션을 사용 할 준비를 마치게 된다. 이 시점부터 UIKit 프레임워크에서는 Event Loop를 만들어 사용자의 객체에 맞는 이벤트를 배분하고, 그에 대한 응답은 사용자 코드에서 이루어진다. 사용자가 애플리케이션을 종료할 때는 applicationWillterminate:메서드를 호출하고, 애플리케이션의 종료 과정이 진행된다. 



[Objective-C부터 네트워크까지 아이폰 프로그래밍 가이드] 발췌 


뷰 컨트롤러의 생명주기는 어떻게 되나요?
뷰 컨트롤러의 생명주기는 아래와 같습니다.
 

- (void)loadView
뷰 컨트롤러에 보여지는 컨트롤러들을 생성하거나 추가할 때 적당한 부분 

- (void)viewWillAppear:(BOOL)animated
뷰 컨트롤러가 사용자에게 보여지기 직전에 호출(복수 호출 가능) 
loadView 다음에 호출 됨 

- (void)viewDidLoad
viewWillAppear 다음에 호출 됨 (단 한번만 호출됨) 

- (void)viewDidAppear:(BOOL)animated
viewDidLoad 다음에 호출 됨(복수 호출 가능)

- (void)viewWillDisappear:(BOOL)animated
해당 뷰컨트롤러가 사라지기 직전에 호출됨  

- (void)viewDidUnload
viewWillDisappear 이후에 호출됨

- (void)viewDidDisappear:(BOOL)animated

viewDidUnload 이후에 호출됨 
Application 생명주기와 합쳐보자면 Application에서 뷰 컨트롤러를 메모리상에 올리고 사용자에게 보여지도록 하면 Application 생명주기와는 별도로 ViewController만의 생몀주기가 또 돌아가게 됩니다.  


[출처 : http://j2enty.tistory.com/76 ]

'Work > Objective-C' 카테고리의 다른 글

NSString  (0) 2012.10.26
Delegation  (0) 2012.03.23
애플리케이션 라이프 사이클  (0) 2012.03.23
String Format Specifiers  (0) 2011.09.01
메모리 해제 관련  (0) 2011.08.24


 

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

'Work > Objective-C' 카테고리의 다른 글

NSString  (0) 2012.10.26
Delegation  (0) 2012.03.23
애플리케이션 라이프 사이클  (0) 2012.03.23
String Format Specifiers  (0) 2011.09.01
메모리 해제 관련  (0) 2011.08.24

C언어 프로그래밍에서는 alloc 으로 생성한 메모리와 new로 생성한 메모리를

똑같이 취급하면 안됩니다. 그래서 메모리를 해제할때 alloc으로 생성했으면 free를 new로 생성했으면 delete함수를

사용해야지 정상적으로 해제가 되는데요

==========================================================================================================
 

(실수로 지난번에 썼던 글을 지워 버렸습니다.

백업해둔것도 없어서 아래 글에 이전내용이라고 한 부분은 그냥 그러려니 하고 읽으세요 -_-;;

중복되는 내용도 있고 하니... )


지난번 강좌에서 Accessor (Getter, Setter)에대해서 설명하는것 까지 했는데요.

이번에도 그냥 편하게 읽어 내려갈 수 있는 내용으로 정리 했습니다.

Objective-C 메모리 관리에서 가장 중요한것은 소유권에 대한 개념입니다.

기본적으로 메모리를 생성하면 메모리를 생성한 object가 소유권을 가지게되고 자신이 소유권을 가진 메모리에 대해서만

release 메시지를 보내서 해제하는것이 가능하고 또 자신의 소유권이 있는 메모리를 해제하지 않을경우

leak가 발생하게 되는것입니다.

그렇다면 소유권개념이 중요한데요 아래 코드를 한번 보시기 바랍니다.

- (NSString *) fullName{

NSString *string = [[[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName] release];

return string;

}

위 코드를 보시면 어떤생각이 드시나요?

잘못된 코드라는걸 아시겠죠. 하지만 메모리 관리의 원칙에서 본다면 잘못된 것은 없습니다.

alloc을 이용해서 메모리를 생성했으니 내가 소유권을 가지고 있게되고 initWithFormat 메소드로 이름과 성을

합쳐서 문자열을 만들고 release메시지를 보내서 소유권을 포기하고

string을 리턴했으니 메모리 관리 원칙에는 정확하게 들어 맞는다는 것입니다.

물론 저도 이렇게 이해하기는 좀 어려웠지만 소유권과 소유권 포기라는 개념으로 생각한다면 틀린건 아니라는거죠.

하지만 release메시지가 보내지는 순간 메모리가 해제되어 버리므로 이런경우는 autorelease 메시지를 사용해야 합니다.

이전에 말씀드렸지만 autorelease pool을 사용하는것은 되도록이면 줄이면 좋다고 했는데요 이런경우에는

반드시 사용해야하는 경우 입니다.

autorelease는 소유권은 지금 포기하지만 메모리 해제는 나중에 메모리가 필요 없을때 하라는 의미입니다.

그리고 이건 제 개인적인 사견인데요. C언어 프로그래밍에서는 alloc 으로 생성한 메모리와 new로 생성한 메모리를

똑같이 취급하면 안됩니다. 그래서 메모리를 해제할때 alloc으로 생성했으면 free를 new로 생성했으면 delete함수를

사용해야지 정상적으로 해제가 되는데요

Objective-C에서는 alloc, new, copy 같은 메소드로 생성한 메모리를 모두 release나 autorelease만

호출해주면 해제가 됩니다.

여기서 한번더 확인할 수 있는건 메모리 생성 메소드들이 직접 메모리를 생성하는것이 아니라 이것도 release와 같이

역시 메시지로 생각해야한다는 것입니다.

생성할때는 메모리를 생성하라는 메시지를 보내서 메모리를 생성해서 소유권을 달라고 하고 해제할때는

해제 메시지를 보내고 소유권을 포기한다고 하는 것입니다.

그리고 retain을 사용해서 소유권을 잠시 빌려서 메모리를 사용하는 것입니다.

(이런 내용은 실제 그렇다는것이 아니라. 제가 그냥 짐작하는 내용입니다.)

생성과 해제를 내가 직접 하는것이 아니라 메시지로 관리하기때문에 메모리의 관리가 C언어에비해 훨씬 광범위하고

범용적으로 관리하는것이 가능하다고 보여집니다. 대신 개념을 이해하고 사용하는데는 약간의 노력이 필요하지만

그만큼 편리한점도 있는것 같습니다.

autorelease pool 을 사용하면 좀 편하긴 하지만 대신 autorelease pool을 남발해서는 안된다고 했는데

무조건 피하기 보다는 적절한 사용법을 익히는것이 더 좋겠죠.

모든 program은 autorelease pool stack을 관리하고 있기때문에 만약 기본 autorelease pool이외에 새로운 autorelease pool을 생성하면 새로운 pool은 최상위 stack에 들어가서 관리되며 어떤 변수에대해 autorelease

메시지를 보내면 autorelease pool stack의 최상위 pool에 방금 autorelease 메시지를 보낸 object를 등록 시켜서

관리하는 것입니다.

그렇기 때문에 효과적으로 autorelease를 사용하기 위해서는 사용자가 임의로 autorelease pool을 만들어서

사용하는것이 좋겠습니다.

아이폰이나 아이패드는 한정된 메모리로 앱을 구동해야하기 때문에 한번에 많은 메모리를 계속 할당하게 하는것이

안좋은데 autorelease pool을 쓰게되면 특별히 메모리가 계속 쌓이기만 할 수도 있기때문에 주의 가 필요한대신

loop문에서 autorelease pool을 사용하면 편하게 관리할 수도 있습니다만 역시 직접 관리 할 수 있는 상황이라면

되도록이면 autorelease pool을 사용하지 않는 편이 좋겠습니다.

대신 autorelease pool을 적극 활용할 수 있는 부분은 값을 리턴할때 인데요.

위쪽에서 보여드렸던 잘못된 예제를 정상적인 코드로 표현하면

- (NSString *) fullName{

NSString *string = [[[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName] autorelease];

return string;

}

이렇게 고치면 autorelease pool에 등록해서 리턴하므로 받는쪽에서 그냥 걱정없이 받아쓰고 내버려두면 되겠죠.

autorelease에대해서는 몇가지 사항이 더 있긴하지만 그다지 중요하지 않은것 같아서 넘어가고

Array(array, collection, dictionary, set등) 와 메모리 관리

이부분 역시 제가 C프로그래머였기때문에 상당히 고민이 되는 부분이었는데요. C에서는 array를 관리할때

등록된 object들의 메모리를 생성했었다면 array를 해제하기전에 모든 등록된 object들을 불러서 하나씩 해제해준뒤에

array를 해제 해야 했었는데요.

Objective-C에서 만약 내가 array클래스를 만드는 사람이라면 어떻게 해야할가요?

addObject로 object가 들어오면 이 object가 언제 해제될지 모르니까 일단 retain 해서 등록해야겠죠.

그리고 object를 제거할때 release 메시지를 보내주겠죠. 그리고 최종적으로 자신이 dealloc될때

남아있는 object들에게도 release메시지를 보내줘야겠죠.

레퍼런스 문서로 보면 실제로 이렇게 코딩이 되어 있는것 같습니다.

그러므로 addObject만 하고 release는 신경쓰지 않아도 되는것입니다. 이런것이 가능한것은 역시 위에서 얘기한

alloc 이나 release가 message개념과 소유권 개념으로 동작하기때문에 가능한 것이겠죠.

그리고 변수들도 object형태로 제작되어 있기때문에 Objective-C 가 C나 C++하고 다르게 이런 유연성이 가능한 것이겠죠.( 반드시 그런것은 아니지만...)

Nib파일과 메모리에 대한 부분을 생각해보도록 하겠습니다.

Nib파일을 사용한 프로그래밍과 코드만을 사용한 프로그래밍에 대한 의견이 분분한것으로 알고 있는데요.

제 생각은 둘다 적절하게 쓰는것이 좋다 입니다. 쉽게 Nib파일로 코드를 작성 할 수 있다면 굳이 코딩만으로 고집할

이유는 없는데요. 제 개인적인 생각으로는 프로그래밍은 예술이 아닙니다. 일부 책같은곳에서 보면 마치 해킹이

예술인것처럼 그래서 고난이도 기술을 적용한 해킹이 진정한 프로그래밍인것처럼 표현하기도 하는데

프로그래밍이 탄생한것은 사람이 노가다로 해야될 단순작업이나 복잡한 계산을 컴퓨터가 대신해주는것이지

그것을 예술로 승화시켜야 되는건 아니지 않습니까. 그러니 과정은 크게 문제가 될만한 부분이 아닙니다. 결과가 중요한 것이지요.

Nib파일을 쓰면 메모리리크가 있다든가 하는 얘기들이 있던데요.

레퍼런스 문서내용으로 보면 있을수도 있지만 그런 경우는 거의 없고 최대한 iOS가 자체적으로 잘 관리를

하려고 한다고 설명하고 있습니다. 약간은 있을수도 있다는 얘기이긴 합니다만...

Nib파일을 사용해서 UI를 생성하면 IBOutlet을 통해서 사용할 수 있게되는데요.

@property (nonaotomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet; 으로 선언해서 사용할 수 있고

그렇기 때문에 dealloc에서 반드시 release해줘야 합니다.

@property( nonaotomic, retain) 와 @synthsize 는 뭔지 아시죠.

Getter와 Setter를 세팅해서 사용하겠다는 것이고 이렇게 하면 좀더 쉽게 사용이 가능한 것라고 지난 강좌에도

설명을 드렸었죠. 이런식으로 이것도 메모리 관리를 위한 한 부분 인 것입니다.

그런데 nib에서 자동으로 생성한 각종 컨트롤들의 해제는 누가 해주느냐 하는것이 관건인데요.

NSWindow object들에는 isReleasedWhenClosed 라는 attribute가 있고 nib 로 UI를 생성하는 경우 이것을 YES로

설정하면 윈도우가 종료될때 자동으로 자기자신을 release 하게 되며 이때 자기자신에게 속해있는 Sub View

object들도 모두 release시키게 됩니다.

이것은 Interface Builder에서 "Release when closed" 체크박스를 체크해두면 attribute를 세팅한것 과 같이

동작합니다. 그리고 NSWindowController object라면 관리하는 Window 들을 자동으로 dispos 시킨다고 되어 있습니다.

- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options

메소드를 이용해서 직접 로딩하고 관리하는것도 가능할듯 합니다.

그러므로 의식적으로 nib파일을 사용하지 않을 필요는 없을 듯 하고 필요에따라 nib나 코딩만을 사용한 프로그래밍을

선택하면 될것 같습니다.

주절주절 많이 써놓긴 했지만 애플에서 제공하는 레퍼런스 가지고도 메모리 관리에 큰 도움이 되지는 않을듯 합니다.

사실 Case by case 로 모든 설명을 레퍼런스에 다 넣을수는 없었을 테니까 가장 기본적인 소유권개념과

alloc, release 가 message개념으로 동작한다는것을 항상 생각하면서 프로그램밍 하는것이 중요할듯 합니다.

레퍼런스에는 좀더 많은 내용이 있지만 레퍼런스를 그대로 옮겨놓는건 그다지 의미가 없을것 같아서

주관적인 의견과 약간의 설명만 추가 했습니다.

관심있는 분들은 원문을 참고 하시기 바랍니다.

==========================================================================================================

참고 : http://cafe.naver.com/mcbugi/129826

'Work > Objective-C' 카테고리의 다른 글

NSString  (0) 2012.10.26
Delegation  (0) 2012.03.23
애플리케이션 라이프 사이클  (0) 2012.03.23
String Format Specifiers  (0) 2011.09.01
메모리 해제 관련  (0) 2011.08.24

+ Recent posts