Contents

조회 수 1721 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
181 Develop [js] 실행되는 디렉토리 확인하는 스크립트.. hooni 2013.04.23 6770
180 Develop [js] 양원님이 공유해 주신 유료(5$란다ㅋ) 자료 ㅋㅋ secret hooni 2013.04.23 7948
179 Develop [js] 여러가지 트리(tree) 모음.. ㅋㅋ file hooni 2013.04.23 7127
178 Develop [js] 웹페이지에서 특정 엘리먼트 드래그, 복사, 컨텍스트메뉴, 키보드 막기 hooni 2013.11.04 30112
177 Develop [js] 윈도우 시작버튼처럼 나오는 메뉴 file hooni 2013.04.23 6750
176 Develop [js] 윤동이가 만든 영어 학습(?) 프로그램 file hooni 2013.04.23 6471
175 Develop [js] 이미지 미리 로딩하기 hooni 2003.04.23 7027
174 Develop [js] 이미지 사이즈를 동적으로 조절.. hooni 2013.04.23 7483
173 Develop [js] 이벤트 전파 3단계 hooni 2013.12.18 9988
172 Develop [js] 이벤트 핸들러(Event Handlers) hooni 2003.04.23 6743
171 Develop [js] 인터넷 주소(URL) 인코딩 ㅋㅋ hooni 2013.04.23 11363
170 Develop [js] 자바스크립트 escape()를 PHP로 받기 hooni 2013.04.23 5999
Board Pagination Prev 1 ... 51 52 53 54 55 56 57 58 59 60 ... 71 Next
/ 71