찾다

 >  Q&A  >  본문

Objective-C 中下列类属性的写法有何不同?

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. 一般情况下应该如何写?

PHPzPHPz2769일 전414

모든 응답(4)나는 대답할 것이다

  • 迷茫

    迷茫2017-04-21 11:18:48

    선언된 변수와 속성을 이 선언이 포함된 .m 파일에서 사용할 수 있는 한, @private을 사용하여 변수를 선언하는 특별한 방법은 object-c에서 고려되지 않는다고 가정합니다.

    물론 모든 것을 공개하는 것은 객체 지향 설계의 캡슐화와 일치하지 않습니다. .m에 직접 작성된 변수와 속성은 정보를 숨기고 캡슐화를 보장하기 위한 것입니다. object-c lib를 작성하는 데 필요한 방법으로 간주되었습니다.

    모든 질문에 대한 답변은 다음과 같습니다.

    1. 은 모두 공개이지만 .m 파일은 #가져올 수 없으며 비공개
    2. 는 간접적으로 구현됩니다.
    3. 중괄호 안에 있는 것은 인스턴스 변수로, 단순한 숫자값일 뿐이며, get/set 메소드에 바인딩될 수 없으며, 자동으로 유지/복사/원자적일 수 없습니다. 속성은 get/set 메서드의 구문 캡슐화(소위 구문 설탕)로, 두 개의 메서드 선언을 하나의 속성 선언으로 바꾸고 다양한 속성에 주석을 추가하여 많은 기본 작업을 완료하는 데 도움을 줍니다.
    4. 일부 lib에서 Foo.h에 외부에 노출되는 선언을 작성한 다음 Foo+Internal.h에 외부에 노출되지 않는 선언을 작성하는 것을 본 적이 있습니다. 나를 사용합니다. 개인적으로 나는 이 접근법을 선호한다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-21 11:18:48

    {} 안에 직접 쓴 것은 인스턴스 변수 이고, @property 앞에 쓴 것은 속성 입니다. 속성의 경우 obj-c는 자동으로 인스턴스 변수를 생성한 다음 속성에 액세스할 때(get/set 메서드를 사용하거나 obj.attr을 사용하여) 자동으로 생성된 이 인스턴스 변수를 사용하고 다른 추가 작업을 수행합니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-21 11:18:48

    @Huan Du님이 이미 잘 말씀해 주셨는데요, 저의 사용 습관에 대해 이야기해보겠습니다

    1. ivar를 사용하는 대신 클래스 확장에서 @property를 선언하면 내부적으로 self.xxx를 사용하여 값을 가져오거나 설정할 수 있으므로 코드가 더 편안해 보입니다.

    2. 헤더 파일에는 외부에 표시되는 메서드/속성만 선언하여 헤더 파일의 내용을 최대한 작고 명확하게 만듭니다. 외부적으로는 읽기 전용이지만 내부적으로는 읽고 쓸 수 있는 속성이 있는 경우 클래스 확장에서 해당 속성을 읽기/쓰기로 다시 선언할 수 있습니다.

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-21 11:18:48

    1. 인스턴스, 퍼블릭
    2. 속성(인스턴스, 세터, 게터 자동 생성), 퍼블릭
    3. 2번과 동일
    4. 인스턴스, 퍼블릭

    인스턴스 앞에 @private을 사용할 수 있습니다

    XCode에서 자동으로 생성되는 코드 형식이기도 한 나의 일반적인 접근 방식은 public을 @property로 작성하여 .h 파일에 넣고, private을

    으로 작성하는 것입니다. 으아아아

    .m 파일에 넣어주세요.

    빈 괄호는 카테고리로 남겨두셔도 되고, 숨김으로 적어주시면 됩니다. 즉, 다른 클래스에서는 이 속성을 볼 수 없습니다.

    회신하다
    0
  • 취소회신하다