Objective-C 및 Swift의 인스턴스 변수 속성(키워드)

2627 단어

strong(기본 속성)


강인용은 바로 우리가 통상적으로 말하는 인용으로 그 존망이 가리키는 대상의 존망을 직접 결정한다.한 대상을 가리키는 인용이 존재하지 않고, 이 대상이 목록에 나타나지 않으면, 이 대상은 메모리에서 방출됩니다.약인용은 대상의 존망을 결정하지 않는 것 외에 강인용과 같다.설령 한 대상이 무수한 인용을 가지고 있다 하더라도, 강한 인용이 그를 가리키지 않는다면, 그것은 제거될 것이다.

weak

  • 코스메틱 Object 유형은 코스메틱 객체가 놓인 후 포인터 주소가 nil로 설정되는 약한 참조입니다.ARC 환경에서 순환 인용을 피하기 위해 흔히 delegate 속성을 weak으로 수식한다.MRC 아래에서 assign 코스메틱을 사용합니다.위크와strong은 다르다. 대상이 더 이상strong 형식의 바늘이 그것을 가리키지 않을 때, 위크형 바늘이 그것을 가리키지 않아도, 위크형 바늘은 제거된다.
  • weak은 assign보다 한 가지 기능이 더 많은데 대상이 사라지면 자동으로 바늘을 nil로 바꾸는 장점은 말하지 않아도 안다.

  • atomic(기본 속성)

  • 변수가tomic라고 성명되었을 때 다중 스레드 중 한 스레드만 접근할 수 있음을 의미한다
  • 변수가tomic라고 성명되었을 때 이 변수는 라인 안전형이지만 접근 속도에 영향을 줄 수 있음
  • 변수가 tomic로 성명될 때 ARC 컴파일 환경이 아닌 경우 이 변수에 대한 정확한 get/set
  • 을 확보하기 위해 접근 자물쇠를 설정해야 한다.

    nonatomic

  • 변수가nonatomic라고 성명되었을 때 여러 라인이 동시에 접근할 수 있음을 의미한다
  • 변수가nonatomic라고 성명되었을 때 비선정 안전형으로 접근 속도가 빠르다.
  • 변수가nonatomic라고 성명될 때 두 개의 다른 라인이 접근할 때 제어를 잃기 쉽다.

  • assign


    인용 계수를 변경하지 않고 기본 데이터 형식에 값을 부여하는 데 사용됩니다.대상을 수식할 수도 있지만 assign에 의해 수식된 대상이 놓인 후에도 바늘의 주소는 존재한다. 즉, 바늘이 nil로 설정되지 않고 야생 바늘이 된 것이다.만약 다음에 대상을 무더기의 메모리에 분배할 때 이 주소로 나누면 프로그램은crash가 됩니다.기본 데이터 형식을 수식할 수 있는 이유는 기본 데이터 형식이 일반적으로 창고에 분배되기 때문에 창고의 메모리는 시스템이 자동으로 처리하고 야외 지침을 만들지 않기 때문이다.

    copy


    메모리에 대상을 복사하고 두 바늘이 서로 다른 메모리 주소를 가리킨다.일반적으로 NSString과 같은 소프트 유형이 있는 객체를 손질하는 데 사용됩니다. 해당 소프트 유형(NSMutableString)과 값을 할당할 수 있기 때문에 객체의 문자열이 수정되지 않도록 속성을 설정하는 것이 복사본이어야 합니다.만약strong으로 수식한다면 대상이 외부에서 수정되면 속성에 영향을 줄 수 있습니다.
    참고:
    1. readonly 키워드는 setter가 생성되지 않기 때문에copy/retain/assign과 조합해서 사용할 수 없습니다.
    2. 기본property 동작은:tomic,assign,readwrite입니다.
    다음은 Swift에서 발췌한 내용: Objective-C에서 Swift로
    strong: Swift에서 기본값
    weak:weak 키워드를 통해 설명
    weak var delegate: UITextFieldDelegate? 
    

    readonly,readwrite: Swift에는 이 두 개의attribute가 없습니다.storedproperty를 정의하면let을 통해 읽기만 하고 var을 통해 읽을 수 있고 쓸 수 있는 것을 정의합니다.Objective-C와 유사하게 하려면 헤더 파일에 대외적으로 있습니다.h는property를readonly라고 성명합니다.m property가 readwrite임을 선언합니다. 이 경우 Swift는 Access Control을 통해 수행됩니다.
    private(set) var property: Int
    

    copy: @NSCopying 명령을 통해 선언합니다.주의해야 할 것은String이다. Array와Dictionary는 Swift에서 인용 유형(reference type)이 아닌 값 유형(reference type)으로 나타나기 때문에 값을 부여하고 초기화하며 파라미터 전달은 모두 복사하는 방식으로 진행된다(간단하게 말하면 String, Array, Dictionary는 Swift에서 struct를 통해 이루어진다)
    nonatomic, tomic: 모든 Swift properties는 nonatomic입니다.하지만 NSLock, GCD 관련 API 등 스레드 보안에는 이미 많은 메커니즘이 있습니다.개인적인 추측 이유는 애플이 원래 사용하던 아주 적은 특성을 없애고 라인 안전에 대해 평소에 우리가 사용하는 더 많은 메커니즘에 맡기려고 하기 때문이다.
    환영하다

    좋은 웹페이지 즐겨찾기