앱스토어 등록을 처음 해보는데 생각보다 어려웠다.

Clean - Build - Archive를 Xcode에서 하고,
Organizer - Archives에서 Validate만 100번은 한 것 같다.

나중에 잊을 것 같아 적어놓으려 한다.

1. 키체인 생성, 애플웹사이트에 올리고, 다운받아서 실행한다.
2. 애플웹사이트에서 Provisioning Profiles을 만들어가 Organizer - Devices에 Imports한다.
3. Xcode에서 Release를 복사해 Distribution을 만들어서 해주어야 한다.
4. Xcode에서 code signing identity를 iPhone Distribution으로 한다.

기타 다른 블로그나 사이트 참고로 code signing 에러를 해결한다.

다음 문제는 코드에 warning중에 Class method ... not found 라는 것이 있으면 앱스토어에 올릴 수 없다.
public API가 아니라 private이라는 것인데 개발할때는 잘 되다가 올릴때만 안된다니 참 이해 못할 노릇이다.
하여간 이것을 다른 함수로 대체해서 다시 만들어야 올릴 수 있다. 

다른 사람들에게 관심이 없는 사람은
인생을 사는 데 굉장히 어려움을 겪게 되고,
다른 사람들에게도 해를 끼치게 된다.
인간의 모든 실패는 이런 유형의 인물에서 비롯된다.
(It is the individual who is not interested in his fellow men
who has the greatest difficulties in life
and provides the greatest injury to others.
It is from among such individuals that all human failures spring.)
- 알프레드 아들러(Alfred Adler)
촌철활인:한치의 혀로 사람을 살린다
월스트리트가 조사한 16,000명의 사장 중 고성과를 창출한 13%는
사람에 대한 관심과 애정 그리고 신뢰를 가지고 있었다고 합니다.
그들은 항상 부하직원의 충고를 구하고,
경청을 하는 특성도 동시에 가지고 있습니다.
진정한 보살핌은 직원들의 큰 충성심을 창출합니다.
사람을 중히 여기면 이익이 자연스럽게 따라옵니다.

Of the 16,000 company presidents investigated by Wall Street,
13% achieved superior results,
and they displayed interest, affection as well as trust in others.
They always sought and listened to the advice given by their subordinates.
When a boss truly starts looking out for his people,
it builds a great sense of loyalty.
When people are valued, profits naturally follow.


‘내일부터 시작할거야’. 이 말이 목표를 실패하게 만든다.
지금까지 당신은 수도 없이 ‘내일부터’라고 말해 왔지만,
사실 그 말은 ‘절대 안 할 거야’라는 말과 다를 바 없다.
일을 미루는 습관은 매우 흔하지만 동시에 큰 손해를 불러 일으킨다.
무언가를 진정으로 하고 싶으면
목표가 무엇이든 지금 당장 시작하라.
- 마크 머피, ‘하드골’에서
촌철활인:한치의 혀로 사람을 살린다
캘거리대학 피어스 스틸 교수는 미루는 습관이 불행을 초래한다고 강조합니다.
조사에 의하면 77%의 사람들이 다이어트를 미룬 경험이 있고,
그들은 바로 시작한 사람들에 비해
자신의 체중에 만족하지 못하는 경우가 여덟 배나 높았습니다.
94%는 미루는 습관 때문에 행복하지 않다고 답했으며,
미루는 습관은 허약한 체질, 불안정한 재정 상태와도 관계가 깊었습니다.

인디언 격언에 어떤 말을 1만 번 이상 되풀이하면
반드시 미래에 이루어진다는 말이 있다.
그냥 말만 하면 다 이뤄진다는 게 아니라 1만 번씩이나 그렇게 말하는
정성과 열정이 있다면 이루어질 수 밖에 없다는 뜻이다.
기적은 저절로 일어나는 게 아니다.
염원이 결집되어 만들어지는 것이다.
- 김홍신, ‘그게 뭐 어쨌다고’에서
촌철활인:한치의 혀로 사람을 살린다
아리스토텔레스는 ‘광기가 섞이지 않은 위대한 재능은 없다’고 했습니다.
광기는 열정, 집념, 정성을 말합니다.
절실하게 원해야 얻을 수 있습니다.
뭔가를 이루기 위해 뼈에 사무치도록 원하고,
이러다 죽어도 좋다고 할 만큼 전력을 다하고,
매일 밤 꿈속에 나타날 정도가 된다면 기적을 맛볼 수 있을 것입니다.


사람과 사람 사이에는 아주 작은 차이가 존재한다.
그러나 이 작은 차이가 엄청난 격차를 만들어낸다.
여기서 작은 차이는 ’마음 가짐이 적극적인가, 소극적인가‘이고
엄청난 격차는 ’성공하느냐, 실패하느냐‘이다.
-나폴레온 힐
촌철활인:한치의 혀로 사람을 살린다
긍정의 중요성에 대한 나폴레온 힐의 주장을 함께 보내드립니다.

‘긍정적인 마음가짐은 영혼을 살찌우는 보약이다.
이러한 마음가짐은 우리에게 부, 성공, 즐거움과 건강을 가져다준다.
반대로 부정적인 마음가짐은 영혼의 질병이며 쓰레기다.
이는 부, 성공, 즐거움과 건강을 밀어내고
심지어 인생의 모든 것을 앗아간다.’


[출처] http://rootnode.tistory.com/114
 

UIImage --> CGImageRef

CGImageCreateWithImageInRect 함수 사용

CGImageRef --> UIImage
UIImage 클래스의 
+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage 메쏘드 사용

ex)


CGImageRef --> CGContextRef
http://www.drobnik.com/touch/2010/07/drawing-on-uiimages/를 참고한다.
CGContextRef newBitmapContextSuitableForSize(CGSize size)
- (UIImage *)imageByDrawingCircleOnImageCG:(UIImage *)image
를 보면 된다.

CGContextRef --> GImageRef
CGImageRef cgImage = CGBitmapContextCreateImage(ctx); //ctx가 CGContextRef type의 변수

CGImageRef --> pixel data
http://developer.apple.com/mac/library/qa/qa2007/qa1509.html
http://stackoverflow.com/questions/448125/how-to-get-pixel-data-from-a-uiimage-cocoa-touch-or-cgimage-core-graphics
http://stackoverflow.com/questions/144250/how-to-get-the-rgb-values-for-a-pixel-on-an-image-on-the-iphone
요약하면,
CGContextRef를 먼저 만들고, 컨텍스트에 이미지를 그린 다음, 거기에서 pixel Data를 뽑아내야 한다.

목표를 높은 곳에 두어야 한다.
똑같은 노력이지만 그것은
목표를 크게 가진 사람에게는 큰 곳을 향한 노력이 되고,
먹고 사는 일에 급급한 목표를 세운 사람에게는 작은 노력이 되고 만다.
스스로 못할 것이라고 생각하는 것은
자신을 속이는 가장 큰 거짓말임을 명심하라.
-존 록펠러
촌철활인:한치의 혀로 사람을 살린다
코이라는 잉어는 작은 어항에서는 5∼8cm, 수족관에서는 15∼25cm,
강물에 방류하면 90∼120cm 까지 자란다고 합니다.

인간은 누구나 무한한 잠재력을 가지고 있습니다.
코이는 환경에 따라 5∼120cm 까지 다양하게 자라지만,
사람은 자신의 무한 잠재력을 인식하고
소명에 바탕을 둔 큰 목표를 설정하여
꾸준히 개발하고 실천하면 누구나 100점짜리 인생을 살아갈 수 있습니다.


회복 시간은 본질적으로 창조성과 긴밀하게 연결되어 있다.
음표들 사이 공간이 있어야 음악이 만들어지고,
문자들 사이에 공간이 있어야 문장이 만들어지듯이,
사랑과 우정, 깊이와 차원이 성장하는 곳 역시 일과 일 사이의 공간이다.
회복 시간이 없는 우리의 인생은
존재감 없이 끝없이 반복되는 행동의 연속일 뿐이다.
-짐 로허, ’몸과 영혼의 에너지 발전소‘에서
촌철활인:한치의 혀로 사람을 살린다
'여가란 우리 생활에 없어서는 안 될 필수불가결한 것이다.
이 세상에서 이루어진
가장 가치 있는 일들은 한가할 때 이루어졌다‘ (조지 버나드 쇼)

'자기 책상을 떠날 수 없을 정도로 회사 일에 충성하는 사람은
바로 그 자리에 앉아 있을 자격이 없는 사람이다.'(웨인 다이어)


Objective-C
[연산자 제어문]
* C, C++ : include
  Objective-C : #import <stdio.h>  여러번 나와도 한번만 import 됨
* Data Type
 - int(4), char(1), float(4), double(8)
 - Id : 객체 포인터 주소 저장 데이터 타입, 어떤 객체라도 저장가능
 - SEL : C언어의 함수 포인터, @selector의 값을 저장할 수 있는 데이터 타입
 
 
* Windows에서 개발 할때 Dev-C++ 툴 사용

* system("PAUSE"); //잠시 정지하기
 
[클래스]
* 클래스내 변수 : 멤버 변수 -> 인스턴스 변수 (Objective-C)
* 클래스내 함수 : 멤버 함수 -> 메서드 (Objective-C)
* @Interface : 메서드, 인스턴스 변수 선언, 상속 선언
  @implementation : 메서드의 기능 구현
  Main : @implementation의 메서드 실행
 
* -(void) print;
  -(void) setValue1:(int)d; //인자값을 넣지 않는다. 하나의 인자
  -(void) setValue1:(int)d Value2:(int)f; //첫번째는 인자값을 넣지 않는다.
  - : 인스턴스 메서드
  + : 클래스 메서드 : 객체생성과 관계없이 호출가능 static
  () : 리턴형
 
* 메서드 호출
  A.func() -> [A func]
 
  [] : 메서드 호출
 
* 포인트 변수 생성
  Calculate *myCalculate;
 
  객체 초기화
  myCalculate = [Calculate alloc];
  myCalculate = [myCalculate init];
 
 
  //인자있는 메서드 호출
  [myCalculate setValue1:12];
  [myCalculate totalSetValue:12 value2:24];
 
* Calculate *myCalculate = [[Calculate alloc] init];

 
* @private, @protected (기본), @public
 
[클래스 상속 - 초기화]
* 슈퍼클래스 메서드 호출
  [super value1];
  [super print];
 
* 자신의 클래스 메서드 호출, this
  [self value1];
 
* nil : 아무것도 없는 변수, null
  NIL : 아무것도 없는 객체
  nil = NIL 같이 씀

[클래스 확장 (카테고리)]
* 상속 : 수식적 개념
* 카테고리 : 수평적 클래스 확장
  기존(원래) 클래스 수정없이 다른 메소드를 사용 가능 메서드만 추가 가능

* 카테고리 구현 : 헤더, 구현 파일 따로 작성
  @interface 클래스명(카테고리명)
  @implementation 클래스명(카테고리명)
 

[클래스 확장 (포싱)]
* Posing[v] ~ as sb (남을 속이기 위해) ~인 체하다

* [CalculatePosing poseAs:[Calculate class]];
  Calculate 클래스는 CalculatePosing 클래스가 된다.
 
 
[클래스 확장 (프로토콜)]
* 블랙박스 개념, 내부구조는 관심없음

* 여러 클래스에서 공통적인 기능을 하는 메서드를 추려낸다. -> 프로토콜

* 자바의 인터페이스나 C++의 가상클래스와 비슷한 개념

* @protocol 프로토콜명
  @interface 클래스명:super클래스<프로토콜1,프로토콜2,...>
 
 
[다형성 다이나믹 바인딩]
* 다형성 : 같은 이름의 메서드가 서로 다른 기능을 한다.

* id 타입을 통한 동적 바인딩 : 모든 객체를 id타입의 변수로 받을 수 있다. -> 코딩량을 최대 1/10이상 줄여 줌

* 정적 바인딩 : 명확하게 자료형을 선언하는 것

* 동적 바인딩 : 실행파일 만들때 마지막까지 객체의 형에 대한 정보를 확정하지 않다가, 객체의 메서드가
  호출될었을때 비로서 컴파일러가 객체의 형에 대해서 알게 되는 구조

* Isa 변수 : 모든 객체는 Object로부터 상속받은 Isa라는 변수를 가지고 있다.
  단순하게 현재의 객체가 어떤 객체인지를 알려주는 정보를 담고 있는 변수
 
* selector를 통한 동적 메서드 호출
  객체의 메서드를 동적으로 호출 할수 있다.
  함수 포인터와 동일한 개념
  Selector는 Sel형 변수에 저장
 
  SEL sel1, sel2;
  sel1 = @selector(print);
  sel2 = @selector(print2);

  [obj perform:sel1];
  perform: Object에서 상속받은 메서드

 

[Foundation 프레임워크]

* Cocoa : MFC와 같은 기초 프레임워크

  Foundation Framework : Mac에서 쓰이는 Objective-C 라이브러리 프레임워크
  Application Framework : Cocoa 환경에서 GUI를 담당하는 프레임워크
  System Framework : Mac OS 커널 부분
 
* GNU step Dev-C++
  Windows : C:\GNUstep\GNUstep\System\Library\Headers\Foundation
  Mac : /System/Library/Frameworks/Foundation.framework

* #import<Foundation/NSObject.h>

* 읽기 전용 : NSArray, NSData, NSDictionary, NSSet, NSString -> 변환값 리턴
  자기 자신을 변화시킴 : NSMutableArray, NSMutableData, NSMutableDictionary, NSMutableSet, NSMutableString -> void형 리턴
 

* NSRange 구조체
  범위값을 가지고 있는 구조체, 보통 범위안에 있는 무언가를 변화시킬때 많이 쓰임
* NSPoint 구조체
  보통 x,y좌표 값을 객체에 넘길때 씀
* NSSize 구조체
  가로길이, 높이를 가지고 있는 구조체
 
* enum
  NSComparisonResult
 

[NSObject 클래스]

* Foundation 프레임워크 Root 클래스 : 대부분 클래스의 부모
  객체의 생성과 해제를 담당
  추상적인 Base클래스로 이해
 
* -(class) class
    현재 객체의 class를 리턴
  -(id) self
    객체 자체를 리턴
  -(BOOL) isMemberOfClass : (Class) aClass
    현재 객체가 인수 클래스의 인스턴스 인지 확인
  -(BOOL) isKindOfClass : (Class) aClass
    현재 객체가 인수 클래스의 인스턴스 인지, 인수 클래스의 서브클래스 인스턴스인지 확인
  -(class)superclass
    현재 객체가 상속한 슈퍼클래스 클래스 객체 리턴
  +(class)superclass
    클래스의 슈퍼클래스 객체를 리턴
  -(BOOL)isEqual:anObject;
    현재객체와 anObject가 같은 객체인 비교
* +(id)alloc
    지정된 클래스의 인스턴스 생성
  +(id)new
    Alloc+init 조합, 보통은 인스턴스 공유를 위해 쓰임
  +(void)initialize
    클래스의 초기화담당, 프로그램에서 직접 호출하면 안됨
  -(id)retain
    현재 객체의 레퍼런스 카운트 1증가, 객체 자체 리턴
  -(id)autorelease
    현재 객체를 자동 해제풀에 추가, 객체자체 리턴
  -(unsigned)retaincount
    현재 객체의 레퍼런스 카운트값 리턴
  -(oneway void)release
    현재의 객체를 해제, (oneway : 함수 끝날때까지 기다리지 말고 넘어가라. void와 함께만 쓰임)
  -(void)dealloc
    현재 객체들의 모두 release되었을때 실행됨


[NSString 클래스]

* #import<foundation/NSString.h>

* NSString *string = @"I'm happy";
  내부적으로 Unicode화 해서 사용하기 때문에 @사용
 
* -(id)initWithString:(NSString*)string;
    문자열대입을 통한 초기화
  -(unsgned int)length;
    객체의 문자열 길이 리턴
  -(const char*)cString;
    객체의 문자열 반환
  -(NSArray*)componentsSeparatedByString:(NSString*)separator;
    문자열을 separator로 나눈 후 NSArray형태로 반환
  -(NSString*)substringFromIndex:(unsigned int)index;
    Index부터 끝까지 문자 반환
  -(NSString*)substringFromRange:(NSRange)aRange;
    aRange범위의 문자열 반환
  -(NSString*)substringToIndex:(unsigend int)index;
    처음부터 index위치까지의 문자열반환
  -(BOOL)isEqualToString:(NSString*)aString;
    aString문자열과 동일한지 반환
  -(NSComparisonResult)compare
    string비교
  -(NSString*)capitalizedString
    각 단어의 첫글자만 대문자로, 나머지는 소문자로 변환
  -(NSString*)lowercaseString;
    소문자화
  -(NSString*)uppercaseString;
    대문자화
  -(NSRange)rangeOfString
    String이 포함된 범위 반환
  -(NSString*)stringByAppendingString
    현재 문자열의 뒤에 aString을 붙여서 반환
 
* NSMutableString : 객체의 문자열 내용을 바꾸려면 NSMutableString 클래스를 사용
  #import<foundation/NSString.h>
 
  -(id)initWithCapacity
    문자열길이로 초기화한다. 꼭 일치할 필요는 없다
  -(void)appendString
    현재 객체 문자열에 aString을 더한다.
  -(void)deleteCharactersInRange
    현재 객체 문자열에서 range 범위의 문자열을 지운다.
  -(void)insertString
    loc위치에 aString문자열 삽입
  -(void)replaceCharactersInRange
    Range범위의 문자열을 aString으로 바꿈
  -(void)setString
    aString으로 바꿈


[NSValue 클래스]

* wraper class

* 배열,사전,집합 객체는 객체형을 요소로 받음 (NSString, NSSet, NSArray,...)
  char,float,double,int등의 자료형을 Foundation 기반의 프로그램에서는 메서드나 자나 요소로 못 씀
  NSValue, NSNumber는 이런 문제점을 보완하기 위해 char,float,double,int등의 자료형을 객체로 만들어주는 클래스
 
* NSValue -> NSNumber 상속

* NSNull 클래스: nil도 foundation 의 인자,요소로 못 넘김, NSNull로 넘겨야 함

* +(NSNumber*)numberWithBool
    Boolen형을 NSNumber형으로
  +(NSNumber*)numberWithChar
  +(NSNumber*)numberWithDouble
  +(NSNumber*)numberWithFloat
  +(NSNumber*)numberWithInt
  -(BOOL)boolValue;
    Boolean자료 리턴
  -(signed char)charValue;
  -(double)doubleValue;
  -(float)floatValue;
  -(signed int)intValue;
 
[NSArray 클래스]

* #import<Foundation/NSArray.h>

* NSArray는 객체만 담을 수 있다.
  @"I'm happy" - (O) 문자열 객체
  NSValue, NSNull,
  nil은 못넣음
* 배열의 끝에는 nil을 넣는다.

* NSArray는 변경 불가능

* -(id)initWithArray
    array배열로 초기화
  -(id)initWithObjects
    객체들을 인자로 받아서 초기화
  -(id)lastObject;
    마지막 객체를 리턴
  -(BOOL)isEqualToArray
    비교 일치여부 리턴
  -(id)objectAtIndex
    index위치의 객체 리턴
  -(unsigned)count
  -(NSString*)componentsJoinedByString
    NSString요소만 배열로 담고 있는 경우 NSString 각 요소사이에 separator를 붙여서 NSString형으로 리턴
   
* NSMutalbArray
  #import<Foundation/NSArray.h>

  -(void)addObject
  -(void)addObjectsFromArray
  -(void)insertObject
  -(void)removeObjectAtIndex
  -(void)replaceObjectAtIndex
  -(void)replaceObjectsInRange
  -(void)setArray
  -(void)removeAllObjects
  -(void)removeLastObject
  -(void)removeObject
 
 
[NSEnumerator 클래스]

* #import<foundation/NSEnumerator.h>

* NSArray, NSSet, NSDictionary 객체에 순서대로 접근할 수 있는 기능 제공

* 프로그램 종료시 해제

* -(NSArray*)allObjects
    배열형태로 리턴
  -(id)nextObject
    다음객체 리턴
   

[NSSet 클래스]

* #import<foundation/NSSet.h>

* Unique한 객체들의 그룹, 순서 없음
  NSArray는 인덱스를 통해, NSDictionary는 키를 통해 접근
  NSSet는 NSEnumerator로 접근

* -(id)initWithArray
  -(id)initWithObjects
  +(id)setWithArray
  +(id)setWithObject
  +(id)setWithObjects
  +(BOOL)containsObject
    요소 중에 존재 여부 반환
  -(NSArray*)allObjects
  -(unsigned)count
  -(BOOL)isEqualToSet
    객체와 동일한지 확인
  -(BOOL)isSubsetOfSet
    객체가 있는 리턴
  -(NSEnumerator*)objectEnumerator
    현재 객체를 NSEnumerator형으로 리턴

* NSMutableSet
  #import<foundation/NSSet.h>
 
  -(void)addObject
  -(void)addObjectsFromArray
  -(void)intersectSet
    교집합 요소를 현재 객체에 대입
  -(void)unionSet
    합집합을 대입
  -(void)removeAllObjects
  -(void)removeObject


[NSDictionary 클래스]

* #import<foundation/NSDictionary.h>

* 키와 값의 집합을 데이터로 저장하는 객체

* -(id)initWithDictionary
  -(id)initWithObjects
    키,자료 배열의 크기 반드시 일치
  -(id)initWithObjectsAndKeys
    키,자료,키,자료 로 초기화 -> 짝수개가 와야 함
  -(BOOL)isEqualToDictionary
    현재 객체와 동일한지 리턴
  -(NSArry*)allKeys
  -(NSArry*)allValues
  -(unsigned)count
  -(NSEnumerator*)keyEnumerator
    key만 NSEnumertor형으로 리턴
  -(id)objectForKey
    key에 맞는 요소 리턴
 
* NSMutableDictionary
  #import<foundation/NSDictionary.h>
 
  -(id)initWithCapacity
  +(id)dictionaryWithCapacity
  -(void)addEntriesFromDictionary
  -(void)removeAllObjects
  -(void)removeObjectForKey
  -(void)removeObjectsForKeys
  -(void)setObject
  -(void)setDictionary
  -(void)
 

[NSFileManager 클래스]

* 파일, 디렉토리를 다루는 주 클래스
  생성,변경,이동,삭제,복사

* #import<Foundation/NSFileManager.h>

* 파일관련
  +(NSFileManager*)defaultManager
  -(BOOL)fileExistsAtPath
  -(BOOL)copyPath
  -(BOOL)contentsEqualAtPath
  -(BOOL)movePath
  -(BOOL)removeFileAtPath
 
* 디렉토리 관련
  -(NSString*)currentDirectoryPath
  -(BOOL)changeCurrentDirectoryPath
  -(BOOL)createDirectoryAtPath
  -(NSArray*)directoryContentsAtPath
  -(BOOL)removeFileAtPath
  -(BOOL)movePath
 

 
[Memory Management]

* 객체 생성, 소멸

  - 기존
    Calculate *mycalculate = [[Calculate alloc] init]; //생성
    ...
    [mycalculate free]; //해제
   
  - Foundation 클래스
    NSString* myName = [[NSString alloc] initWithString:@"테스트"]; //생성
    ...
    [myName release];//해제

* 자동으로 해제되는 객체들

  - 사용자가 만든 경우 : alloc -> release
 
  - 명시적으로 해제하지 않아도 되는 메서드들이 있음
    예를들어 NSString에서 stringWithFormat 메서드를 사용할 경우 alloc을 사용하지 않아도 객체가 생성됨
    autorelease pool이 이렇게 생성되는 메모리를 자동 해제해 준다.
    개발자는 autorelease pool만 만들어주면 됨

* NSAutoreleasePool (중요)
  프로그램이 끝나는 시점에 자동해제됨
  너무 많으면 해제될때 부하가 걸릴 수 있음

  여기에 넣으면 프로그램 중간에 해제하면 안된다.
  마지막까지 메모리를 잠기게 하는 기능이라고 보면 됨
  객체의 해제 시점을 마지막으로 미루는 것도 됨
 
  반드시 선언해야 하는 것
 
  int main(void)
  {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    .,,
    [pool release];
    return 0;
  }
   
* 메모리 관리
  예) 코엑스 주차장 관리하기
  2천대 주차 가능, 들어갈때 번호표를 뽑음, 나올때 돈을 내고 번호표 반납
  문을 닫을때 차가 한대도 없어야 함
 
  경비원이 퇴근시 주차장 셔터를 내려야 하는데 주차장에 주차여부 쉽게 아는 방법?
  뽑아간 번호표 개수, 반납받은 번호표 개수를 세어봄
 
  번호표를 뽑는다 = 객체를 생성
  번호표 반납 = 객체 해제
  reference count로 관리
 
* reference count
  alloc, retain(보존), new, copy : 1증가
  release : 1감소
 
  autorelease를 했을때는 감소하지 않음
 
  retain : 객체의 소유권을 갖는다. call by reference 개념 때문에 나온 개념
 

* dealloc
  모든 객체가 release되면 마지막에 호출된다
  가장 마지막에 자동으로 호출됨


* 메서드안에서 객체를 생성해서 리턴하는 경우 autorelease로 리턴한다.
  -(NSString*)ReturnNSString {
    NSString *rec = [[NSString alloc] initWithString:@"I am happy"];
    [ret autorelease];
    return ret;
   }

 

[Copy, MutableCopy 메서드]

* 프로토콜이다.

* Foundation 프레임워크 클래스들은 <NSCopying>, <NSMutableCopying>을 모두 따름
  @interface NSString:NSObject<NSCoding, NSCoping, NSMutableCopying>
 
* Copy, MutableCopy 메서드
  retaincount가 1증가
 
* MutableCopy는 Mutable형을 카피할때 사용

* <NSCopying>프로토콜 선언
  @implementation 섹션에 copyWithZone를 구현한다.
  [객체 copy]로 호출
 
  copy가 copyWithZone을 내부적으로 호출
 

 


자포스를 만난 것은 제 인생 최고의 행운이예요.
저는 매일 아침 눈을 뜨면 회사 갈 생각에 가슴이 설렌답니다.
주말에는 월요일이 너무 멀게 느껴져 참을 수 없을 정도예요.
- 리즈 (자포스 직원), '아마존은 왜? 최고가에 자포스를 인수했나'에서
촌철활인:한치의 혀로 사람을 살린다
직장인들이 금요일 대신 월요일을 고대하는 사회,
즉 모든 직장인들이 TGIF 대신 TGIM(Thanks god! It's a Monday)을
외치게 된다면 세상은 정말 살기 좋은 곳으로 바뀔 것입니다.
그래서 우리 직원들이 이렇게 말하는 회사를 만들고 싶습니다.

“휴넷을 만난 것은 제 인생 최고의 행운이예요.
저는 매일 아침 눈을 뜨면 회사 갈 생각에 가슴이 설렌답니다.
주말에는 월요일이 너무 멀게 느껴져 참을 수 없을 정도예요.”

+ Recent posts