Contents

조회 수 1896 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
287 Develop [ios] 앱딜리게이트 라이프사이클 (AppDelegate Lifecycle) file hooni 2014.05.09 4674
286 Develop [ios] 앱 딜리게이트 얻어오기. (AppDelegate) hooni 2014.05.10 3530
285 Develop [ios] URL 파라미터 파싱~ hooni 2014.05.12 3852
284 Develop [ios] 언어, 지역, 국가 설정 가져오기 hooni 2014.05.12 275858
283 Develop [ios] 아이폰 GPS 사용하기 hooni 2014.05.24 4192
282 Develop [ios] iOS에서 디바이스 종류 알아오기 hooni 2014.05.24 3883
281 Develop 알고리즘 성능분석 file hooni 2014.06.24 3344
280 Develop 알고리즘 성능 분석 기준 hooni 2014.06.24 3114
279 Develop [ios] XCode에서 Provisioning Profile 여러개 중복될 때 hooni 2014.06.26 3068
278 Develop [ios] TextField 특정 문자만 사용하도록 하기 hooni 2014.06.30 2909
277 Algorithm OCB5 Injection 앗싸뵹! ㅋㅋ file hooni 2014.07.01 1288
» Develop [ios] @property의 속성 (strong, weak, copy) 사용 경우 hooni 2014.08.08 1896
Board Pagination Prev 1 ... 70 71 72 73 74 75 76 77 78 79 ... 98 Next
/ 98