Objective-C 및 Swift의 인스턴스 변수 속성(키워드)
strong(기본 속성)
강인용은 바로 우리가 통상적으로 말하는 인용으로 그 존망이 가리키는 대상의 존망을 직접 결정한다.한 대상을 가리키는 인용이 존재하지 않고, 이 대상이 목록에 나타나지 않으면, 이 대상은 메모리에서 방출됩니다.약인용은 대상의 존망을 결정하지 않는 것 외에 강인용과 같다.설령 한 대상이 무수한 인용을 가지고 있다 하더라도, 강한 인용이 그를 가리키지 않는다면, 그것은 제거될 것이다.
weak
atomic(기본 속성)
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 등 스레드 보안에는 이미 많은 메커니즘이 있습니다.개인적인 추측 이유는 애플이 원래 사용하던 아주 적은 특성을 없애고 라인 안전에 대해 평소에 우리가 사용하는 더 많은 메커니즘에 맡기려고 하기 때문이다.
환영하다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.