objective-c---구성원 변수 역할 영역, @property, @Synthesize, id, 다시 쓰기, 사용자 정의 구조 방법

7496 단어 objective-c

구성원 변수 역할 도메인:

  • @public: 어디서든 대상에 직접 접근할 수 있는 구성원 변수
  • @protected: 현재 클래스와 하위 클래스의 대상 방법에 직접 접근할 수 있음(기본값)
  • @private: 현재 클래스의 대상 방법에서 직접적인 방법으로 하위 클래스는 할 수 없습니다.
  • @package: 같은 '시스템 내' (프레임워크) 에 접근할 수 있습니다. @public와 @private 사이
  • 참고:

  • 부모 클래스의 개인 구성원 변수(private 수식 변수)는 하위 클래스 방법에서 변수를 통해 직접 접근할 수 없지만 하위 클래스 내부에는 그 변수가 있어 set 방법과 get 방법으로만 접근할 수 있다.
  • 네.m(실행 파일)에서 명시된 구성원 변수는 기본적으로 사유
  • @implementation Person
    {
         int _age;// 
    }
    // : .m .h 
  • implementation에서 정의한 구성원 변수는 하위 클래스에서도 이 구성원 변수
  • 가 있다.

    @property와synthesize


    다음은 Person 클래스의 코드를 예로 들면
    에 있습니다.h 파일
    @interface Person : NSObject
    
    {
        int _age;
        NSString *_name;
    }
    
    @property int age;
    @property NSString *name;
    
    @end

    표시 2 개 속성: 연령:age,이름:name, (@property로) 대응하는 setter와 Getter 방법 2개를 기본적으로 생성합니다.
    @synthesize는 get과 set 방법을 자동으로 실현하고, 그 다음에 =멤버 변수를 추가하는 것을 알려 줍니다.
    에 있습니다.m 파일 중
    @implementation Person
    
    @synthesize name = _name; // _name 
    @synthesize age = _age;
    
    @end

    setter 2개와 Getter 방법을 실현하는 것을 나타낸다. 그 중에서age=age는 Getter와setter 방법에서 조작하는 실력 변수가 라고 합니다.age, 생략하면=age, = _name, 그럼 있을 거야.l 파일에서 같은 이름의 실례 변수age,name (주의:여기 밑줄이 없습니다) 이 생성된 setter와 Getter 방법이 실행하는 실례 변수는age,name이므로age,_name이 실행되지 않았습니다.ios 5.0 후 @synthesize도 생략하고 쓰지 않을 수 있습니다.h 파일에서 @property만 쓰면 컴파일러는 자동으로 해당하는 실례 변수를 생성하고 실례 변수의 이름은 속성 이름 앞에 밑줄을 긋는다.

    @synthesize 연서:

    @synthesize age = _age,name = _name;

    @property 연결:

    @property NSString *name,*sex;
    
    
    //@property : , , :
    @property int age,NSString *name;

    가장 간단한 단계 구성원 변수와 get,set 방법의 설명, 실현

    @property int age;  // _age, 
    
    // : , 

    synthesize 없음=멤버 변수

    // .m 
    @synthesize age;
    // age , _age, age, @private age 。

    @property 특성

  • xcode 4.4 이후 @property는 @synthesize 기능을 독점했다. 즉, @property는 setter와getter의 설명과 실현을 동시에 생성할 수 있다.
  • 생성의 원칙: 없으면 생성을 도와준다.예컨대m 파일에 setter 방법이 있지만 Geter 방법이 없으면 Geter 방법만 생성됩니다.
  • @property int age; 만일h 파일의interface에 int 가 표시되지 않음age, @property를 통해 setter나 Getter를 생성하는 방법 중 하나입니다.@private int를 생성합니다age;@property를 통해 setter나 Getter를 생성하는 방법이 없으면 @private int를 생성하지 않습니다age.

  • id


    id: 만능 바늘로 이해할 수 있습니다.\모든 oc 대상을 가리킵니다.ID = NSObject *
    하나의 Person 클래스가 있는데, Person 대상을 만드는 데는 다음과 같은 세 가지 방법을 사용할 수 있다
        Person *p = [Person new];
        NSObject *o = [Person new];
        id id1 = [Person new];

    다시 쓰기 init 방법 (구조 방법)

    // id, instancetype
    - (id)init{
        //1、 super init , 
        //2、 
        //3、return self
    
        self = [super init];  // 
        if (self != nil) {
            _age = 23;
        }
    
        return self;  // 
    }

    구조 방법을 다시 쓰는 데 주의해야 할 점:

  • 부류의 구조 방법을 먼저 호출([super init])
  • 하위 클래스 내부 구성원 변수의 초기화
  • 사용자 정의 구성 방법


    구조 방법을 사용자화하는 사양:

  • 무조건 대상 방법, 무조건 - 시작
  • 반환값은 일반적으로 id 형식
  • 방법명은 일반적으로 init로 시작한다
  • // :
    // .m 
    - (id)initWithName:(NSString *)name{
        if (self = [super init]) {
            _name = name;
        }
        return self;
    }

    사용자 정의 구성 방법 호출
    Person *p = [[Person alloc]initWithName:@"chenfanfang"];

    사용자 정의 구조 방법에서 초기화하려는 구성원 변수가 부류의 구성원 변수에 속하면 점문법(즉 부류의 set 방법을 호출하여 실현할 수 있음)

    -(id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no{
        if (self = [super init]) {
            _no = no;
            self.name = name; // [self setName:name];
            self.age = age;   // [self setAge:age];
        }
        return self;
    }

    주: 상기 구조 방법의 재작성 예는 개발에서 흔히 볼 수 없고 흔히 볼 수 있는 예는 다음과 같다.

    - (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no{
        if (self = [super initWithName:name andAge:age]) {
            _no = no;
        }
        return self;
    }

    좋은 웹페이지 즐겨찾기