Contents

조회 수 1651 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
@property의 속성 (strong, weak, copy) 사용 경우

(1) strong을 사용하는 경우
: 내가 정의하는데 중요하다고 참조를 보장해야 하는 경우와 IB에서 아웃렛(IBOutlet)을 연결하는 경우(컨트롤변수, IBOutlet) 메인뷰는 strong을 기본(recommand)으로 잡아준다.

ex) XXXAppDelegate.h
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) BIDViewController *viewController;

ex) XXXViewController.h
@property (weak, nonatomic) IBOutlet UIView * backView;


(2) weak를 사용하는 경우
: 내가 정의하는데 중요하다고 참조 보장할 필요가 없는 경우와 IB에서 아웃렛(IBOutlet)을 연결하는 경우(컨트롤변수,  IBOutlet) 하위뷰는 weak를 기본(recommand)으로 잡아준다
: 보통, delegate는 weak로 지정한다. weak로 사용하는 이유는 이미 참조유지(retain)하고 있을지도 모르는 델리게이트를 실수로 참조 유지하는 일이 없게 하기 위해서다.
 설사 해당 델리게이트가 객체의 참조를 유지하지 않는다는 사실을 이미 알고 있다고 하더라도
 코코아 터치에서 사용하는 표준 패턴에서는 델리게이트 참조를 유지하지 않으므로 구태여 다른 방식을 사용할 필요는 없을 것 같다.
ex) XXXViewController.h
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UILabel *sliderLabel;
@property (weak, nonatomic) IBOutlet UISwitch *leftSwitch;
@property (weak, nonatomic) id delegate;

(3) copy를 사용하는 경우
: 테이블뷰에서 셀을 하위뷰로 잡아서 사용하는 경우, 저장 NSString값의 경우(변경가능성이 있을 때), 값을 안정적으로 보관해서 받을 때
: 보통, NSString이나, NSDictionary처럼 값 기반의 클래스를 다룰 때 사용

ex) XXXTableViewCell
@interface XXXTableViewCell : UITableViewCell
@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) NSString *color;
@property (copy, nonatomic) NSDictionary *selection;
@end

=> 컨트롤러에서 각 셀로 값을 넘겨줄 때 사용할 두 속성을 정의할 때, NSString속성을 strong으로 사용해 정의하지 않고 copy를 사용해 정의했다.
=> 속성의 세터로 전달된 문자열값은 값을 전달한 코드에서 나중에 값을 수정할 수 있는 NSMutableString이 될 수도 있으므로, 항상 이렇게 NSString값을 정의하는 것이 좋다.
=> 속성으로 전달된 각 문자열을 복사하면 세터가 호출된 순간에 문자열에 들어 있는 값을 안정적으로 속성에 보관할 수 있다.

[보충설명] 수정할 수 문자열인 가능성이 있을 때, (수정가능한 하위클래스를 비롯해) 모든 NSString에 대해 copy를 호출하면 항상 수정할 수 없는 복사본이 반환된다. 더불어 성능에 대한 부담도 걱정하지 않아도 된다. 수정할 수 없는 문자열 인스턴스에 대해 copy메세지를 보내면 실제로 복사하 일어나는 것이 아니라 대신 참조 카운트를 증가시킨 후 같은 문자열 객체를 반환한다. 이와같이 copy를 사용하면 객체가 변하지 않을 뿐더러 누구든 문자열 객체를 안심하고 사용할 수 있다.

[주의] 
ARC에서 메모리 관리를 모두 해준다고 해서 속성을 선언할 때 아무렇게나 선언해서는 안된다. 사실 ARC에서는 선언된 속성이 약참조(weak)인지 강참조(strong)인지 검사해 자동으로 릴리스해줄 뿐이며,
속성 선언을 잘못한 경우(강참조가 여러 개인 경우) 메모리가 해제되지 않을 수 있다.

[참고] https://www.hooni.net/xe/35660
[출처] http://funnyrella.blogspot.kr/2013/10/46_31.html

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
733 Develop [opengl] 컴퓨터 그래픽스 강의 자료(수업자료) file hooni 2003.04.23 20432
732 Develop [android] [번역] 안드로이드 Android Cloud to Device Messaging(C2DM) hooni 2013.04.23 20419
731 Develop [php] substr() 한글 자를 때 깨짐 방지 hooni 2014.01.09 20359
730 Develop [ios] UIView에서 상위 UIViewController 가져오기 hooni 2013.09.27 20140
729 Develop [c] UTF-8을 EUC-KR로 변환.. (iconv) file hooni 2013.04.23 20116
728 Develop [c] AES 알고리즘 (암호화/복호화) file hooni 2003.04.23 20046
727 Develop [php] XE 에서 php 구문 사용하기 (XE 템플릿에서) hooni 2013.10.31 19433
726 Develop [js]모바일 웹에서 orientationchange hooni 2013.04.23 19355
725 Develop 모터에 대한 pid 제어.. ㅎㅎ file hooni 2013.04.23 18873
724 Develop URI 인코딩, URL 인코딩 file hooni 2013.04.23 18841
723 Develop [ios] Objective-C에서 형식이 있는 문자열(Format Strings)에 사용할 수 있는 토큰들(Tokens) file hooni 2013.04.23 18781
722 Develop [ios] libxml/tree.h file not found file hooni 2013.08.08 18708
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 71 Next
/ 71