'2010/11/16'에 해당되는 글 3건

  1. 2010.11.16 [XCODE] 메모리 관리 규칙
  2. 2010.11.16 [XCODE] Redefine NSLog
  3. 2010.11.16 [XCODE] DEBUGING 팁

규칙1]

 - alloc, copy, new 를 포함하는 메서드는 retain된 객체를 리턴한다. 

  이 리턴되는 객처는 retain되어 있기 때문에 반드시 release를 호출해야 한다.


규칙2]

 - 자신이 retain 호출했다면 반드시 release를호출해야 한다.


규칙3]

 - 클래스메서드가 객체를 생성해 줄 때는  autorelease 객체를 리턴한다.

   그렇기 때문에 별도의 release를 호출하지 않아도 오토릴리즈 풀이 자동으로 release를 호출한다.

  하지만, 이 객체에 대한 retain을 호출했다면 같은 횟수만큼 release를 호출해야 한다.

 

 예)

  NSString *pStr = [NSString stringWithString:@"Test"];


규칙4]

 - 배열, 딕셔너리 등의 자료구조 클래스는 추가된 객체를 retain하고, 항목을 제거할 때 release를 한다.

  NSArray, NSDictionary, NSSet등의 자료구조 클래스는 항목으로 추가되는 객체에 retain을 한 번 호출한다.

 그리고 객체가 포함 객체에서 제거될 때 release를 호출한다. 그렇기 때문에 별도의 retain을 해 줄 필요는 없다.


규칙5]

 - retain 속성을 갖는 접근자의 경우(@property (retain) ... ) 객체가 설정될 때 자동으로 retain 된다.

예) 

 myImage = [[UIImage alloc] init]; // myImage retain '1'

self.userImage = myImage; // myImage retain '2'

[myImage release]; // myImage retain '1'


...


self.userImage = myImage2; // myImage retain '0'


규칙 6]

- 메서드가 리턴하는 객체는 autorelease을 하고 리턴하도록 한다.

예)

- (NSString *) findTopPlayer{ 

NSString *ret = [[top objectAtIndex:0] copy];

[ret autorelease];

return ret;


규칙7]

 - IBOutlet으로 연결되는 객체는 retain 되어 있다. 따라서, 반드시 release를 호출해야 한다.


예)

IBOutlet UIButton *button;


....

- (void) dealloc{

[button release];

[super dealloc];

}



출처 : http://maluchi.cafe24.com/xe/MyProgrammingTips/17149

'개발 > iOS' 카테고리의 다른 글

[IOS] image size  (0) 2010.11.28
[XCODE] Breakpoint가 안먹을 때  (0) 2010.11.28
[XCODE] Redefine NSLog  (0) 2010.11.16
[XCODE] DEBUGING 팁  (0) 2010.11.16
[IOS] Core Data에서 SQLite 사용하기  (0) 2010.11.01
Posted by 나랑살자
,

[XCODE] Redefine NSLog

개발/iOS 2010. 11. 16. 17:51
x#ifdef DEBUG
    #define NSLog(fmt, ...) NSLog((@"%s[Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
    #define NSLog(...)
#endif

'개발 > iOS' 카테고리의 다른 글

[IOS] image size  (0) 2010.11.28
[XCODE] Breakpoint가 안먹을 때  (0) 2010.11.28
[XCODE] 메모리 관리 규칙  (0) 2010.11.16
[XCODE] DEBUGING 팁  (0) 2010.11.16
[IOS] Core Data에서 SQLite 사용하기  (0) 2010.11.01
Posted by 나랑살자
,

[XCODE] DEBUGING 팁

개발/iOS 2010. 11. 16. 17:48
요즘 Xcode를 만져보고 있는데, 어렵긴 어렵다. 스타일이라고 해야할지 접근 방식이라고 해야할지 모르겠지만 환경 자체가 너무나 이질적인지라 .. 쓰다보니 디버깅 관련된걸 메모해둬야 할 것 같아서 몇 가지 적어본다 (사실 요즘 보고 있는 책에 나오는 내용이긴 하지만;)


- 좀비 객체 만들기 ; 
객체를 미리 해제하는 코드에서 오류가 발생할 경우, 문제의 개체를 좀비 상태로 만들어 해제를 막고 객체의 상태를 체크할 수 있다. 이는 실행 파일 설정을 변경해야 하는데, Executable Info의 Arguments 탭에서 다음 환경 변수를 추가한다 :
NSZombieEnabled=YES
CFZombieLevel=16

- NSAssert 해제 ;
NSAssert의 검증을 막으려면 Project/Build Info의 Build 탭에서 설정을 추가하면 된다. GCC 4.0 - Preprocessing 하단의 Preprocessor Macros에 NS_BLOCK_ASSERTIONS를 정의하면 된다.
(어째서 이걸 '정의'해야 Assert의 검증을 'Block'하는건지... 이게 GCC 스타일인가?;)

- 예외 발생시 브레이크 포인트 걸기 ;
XCode에서는 디버깅 시 예외가 발생했을 때 자동으로 예외가 발생한 행에서 브레이크포인트가 걸리지 않는다. (그러니까 대체 왜!) Breakpoints 창을 열어서 objc_exception_throw 심볼릭 브레이크포인트를 추가해야 한다.
참고로 malloc_error_break는 alloc이 실패할 때 발생하는 듯 ... 하지만 왜 이건 애플 레퍼런스 라이브러리에도 안 나오는지가 미스테리. 뭐지?

'개발 > iOS' 카테고리의 다른 글

[IOS] image size  (0) 2010.11.28
[XCODE] Breakpoint가 안먹을 때  (0) 2010.11.28
[XCODE] 메모리 관리 규칙  (0) 2010.11.16
[XCODE] Redefine NSLog  (0) 2010.11.16
[IOS] Core Data에서 SQLite 사용하기  (0) 2010.11.01
Posted by 나랑살자
,