1. 在 .h 文件中,例如:
@interface PullToRefreshView : UIView { UILabel *lastUpdatedLabel; UILabel *statusLabel; CALayer *arrowImage; UIActivityIndicatorView *activityView; }
2. 在 .h 文件中,例如:
@property (nonatomic, strong) UIScrollView *scrollView;
3. 在 .m 文件中,例如:
@interface PullToRefreshView @property (nonatomic, strong) NSArray *titles; @end
4. 在 .m 文件中,例如:
@implementation TopicListViewController { PullToRefreshView *pull }
简而言之,是否是
1. 在头文件中的是 public 属性,在 .m 中的是 private 属性?
2. 在 @interface 和 @implementation 中用大括号扩起来的和 @property 有何区别?(除了synthesize方面)
3. 一般情况下应该如何写?
迷茫2017-04-21 11:18:48
선언된 변수와 속성을 이 선언이 포함된 .m 파일에서 사용할 수 있는 한, @private을 사용하여 변수를 선언하는 특별한 방법은 object-c에서 고려되지 않는다고 가정합니다.
물론 모든 것을 공개하는 것은 객체 지향 설계의 캡슐화와 일치하지 않습니다. .m에 직접 작성된 변수와 속성은 정보를 숨기고 캡슐화를 보장하기 위한 것입니다. object-c lib를 작성하는 데 필요한 방법으로 간주되었습니다.
모든 질문에 대한 답변은 다음과 같습니다.
天蓬老师2017-04-21 11:18:48
{} 안에 직접 쓴 것은 인스턴스 변수 이고, @property 앞에 쓴 것은 속성 입니다. 속성의 경우 obj-c는 자동으로 인스턴스 변수를 생성한 다음 속성에 액세스할 때(get/set 메서드를 사용하거나 obj.attr을 사용하여) 자동으로 생성된 이 인스턴스 변수를 사용하고 다른 추가 작업을 수행합니다.
迷茫2017-04-21 11:18:48
@Huan Du님이 이미 잘 말씀해 주셨는데요, 저의 사용 습관에 대해 이야기해보겠습니다
1. ivar를 사용하는 대신 클래스 확장에서 @property를 선언하면 내부적으로 self.xxx를 사용하여 값을 가져오거나 설정할 수 있으므로 코드가 더 편안해 보입니다.
2. 헤더 파일에는 외부에 표시되는 메서드/속성만 선언하여 헤더 파일의 내용을 최대한 작고 명확하게 만듭니다. 외부적으로는 읽기 전용이지만 내부적으로는 읽고 쓸 수 있는 속성이 있는 경우 클래스 확장에서 해당 속성을 읽기/쓰기로 다시 선언할 수 있습니다.
高洛峰2017-04-21 11:18:48
인스턴스 앞에 @private을 사용할 수 있습니다
XCode에서 자동으로 생성되는 코드 형식이기도 한 나의 일반적인 접근 방식은 public을 @property로 작성하여 .h 파일에 넣고, private을
으로 작성하는 것입니다. 으아아아.m 파일에 넣어주세요.
빈 괄호는 카테고리로 남겨두셔도 되고, 숨김으로 적어주시면 됩니다. 즉, 다른 클래스에서는 이 속성을 볼 수 없습니다.