Views 1656 Votes 0 Comment 0
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
@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
No. Category Subject Author Date Views
821 Develop [js] 실행되는 디렉토리 확인하는 스크립트.. hooni 2013.04.23 6764
820 Develop [c] 파일 복사(copy) 프로그램 샘플 소스 file hooni 2003.04.23 6770
819 Develop [php] 피코맥스용 검색엔진 ㅋㅋ file hooni 2013.04.23 6781
818 Develop [c] 문자열 컨트롤 함수로 만든 프로그램들.. file hooni 2003.04.23 6786
817 Develop [js] One Time Pad key generatorㅡ.,ㅡ; file hooni 2013.04.23 6789
816 Develop [js] ajax를 이용해 외부문서 불러오기.. hooni 2013.04.23 6794
815 Develop [js] 숫자만 입력하게 하는 자바스크립트 hooni 2013.04.23 6795
814 Develop [c] 학교 건물 최단거리 찾는 웹 연동 프로그램 file hooni 2013.04.23 6800
813 Develop [c] 단기과정[01/14] 파일 입출력 file hooni 2003.04.23 6821
812 Develop [c] 웹 메모장.. ㅋㅋ file hooni 2013.04.23 6823
811 Develop [c++] 프리렉(freelec) 예제 자료.. ㅋㄷ file hooni 2013.04.23 6835
810 Develop [js] 수명체크 프로그램 ㅋㅋ file hooni 2013.04.23 6838
809 Develop [c] 문자열 str_shift 예제.. file hooni 2013.04.23 6839
808 Develop [js] get방식, url이후 모두 그대로 읽어오기.. hooni 2013.04.23 6841
807 Develop [ajax] 샘플 코드와 한글처리에 대한 간단한 설명 hooni 2013.04.23 6842
806 Develop [pdf] 윈도우즈 95 시스템 프로그래밍(Windows 95 system programming) file hooni 2013.04.23 6842
Board Pagination Prev 1 ... 21 22 23 24 25 ... 74 Next
/ 74