iOS 각종 수정자 의 차이 점 집합(추천)

5459 단어 ios수식 부호
atomic
구성원 변수의@property 속성 을 설정 할 때 기본 값 은 atomic 이 고 다 중 스 레 드 보안 을 제공 합 니 다.
다 중 스 레 드 환경 에서 원자 조작 은 필요 하 다.그렇지 않 으 면 잘못된 결 과 를 일 으 킬 수 있다.atomic 를 추가 하면 setter 함수 가 아래 와 같이 됩 니 다.

{lock}
if (property != newValue) { 
[property release]; 
property = [newValue retain]; 
}
{unlock}
nonatomic
다 중 스 레 드,변수 보 호 를 금지 하고 성능 을 향상 시 킵 니 다.
atomic 는 Objc 가 사용 하 는 스 레 드 보호 기술 로 기본적으로 쓰기 가 완료 되 지 않 았 을 때 다른 스 레 드 에 의 해 읽 히 고 데이터 오 류 를 방지 하 는 것 입 니 다.이런 메커니즘 은 시스템 자원 을 소모 하기 때문에 아이 폰 과 같은 소형 장치 에서 다 중 스 레 드 간 의 통신 프로 그래 밍 을 사용 하지 않 으 면 nonatomic 는 매우 좋 은 선택 이다.
assign
기본 데이터 형식(NSInteger,CGFloat)과 C 데이터 형식(int,float,double,char)등.
이 표 시 는 설정 기 가 직접 값 을 부여 하 는 것 을 설명 합 니 다.이것 도 기본 값 입 니 다.쓰레기 수집 을 사용 하 는 프로그램 에서 assign 속성 을 사용 하고 NSCopying 프로 토 콜 에 부합 하려 면 기본 값 을 간단하게 사용 하 는 것 이 아니 라 이 표 시 를 명확 하 게 지적 해 야 합 니 다.그렇지 않 으 면 컴 파일 경 고 를 받 을 수 있 습 니 다.이것 은 복사 가 가능 하 더 라 도 컴 파일 러 에 할당 이 필요 하 다 는 것 을 다시 한 번 설명 한다.
retain
다른 NSObject 와 하위 클래스 에 대해 매개 변 수 를 release 이전 값 으로 하고 새 값 을 retain 합 니 다.
retain 을 지정 하면 값 을 할당 할 때 들 어 오 는 retain 메 시 지 를 깨 웁 니 다.이 속성 은 Core Foundation 대상 이 아 닌 Objective-C 대상 유형 에 만 사 용 됩 니 다.(그 이 유 는 retain 이 대상 의 인용 수 를 증가 시 키 고 기본 데이터 형식 이나 Core Foundation 대상 은 인용 계수-번역자 주)가 없 기 때문이다.
메모:대상 을 배열 에 추가 할 때 인용 수 는 대상 의 인용 횟수+1 을 증가 합 니 다.
copy
NSString 에 대해 서 는 값 을 할당 할 때 들 어 오 는 값 의 복사 본 을 사용 합 니 다.복사 작업 은 copy 방법 으로 실 행 됩 니 다.이 속성 은 NSCopying 프로 토 콜 을 실행 한 대상 유형 에 만 유효 합 니 다.
copy 와 retain 의 차이 점:
Copy 는 사실 같은 대상 을 만 들 었 습 니 다.retain 은 다음 과 같 지 않 습 니 다.
1.예 를 들 어 NSString 대상,주 소 는 0 입 니 다.×1111,내용 은@"STR",다른 NSString 으로 복사 한 후 주 소 는 0 입 니 다.×2222,내용 이 같 습 니 다.
2.새로운 대상 retain 은 1 입 니 다.기 존 대상 이 retain 을 다른 NSString 으로 변경 하지 않 은 후에 주소 가 같 습 니 다(포인터,포인터 복사).내용 은 당연히 같 습 니 다.이 대상 의 retain 값+1 입 니 다.
요약:retain 은 포인터 복사 이 고 copy 는 내용 복사 입 니 다.
assign 과 retain:
1.C 를 접촉 한 적 이 있다 면 malloc 로 메모리 하 나 를 분배 하고 주소 할당 을 포인터 a 에 게 주 었 다 고 가정 합 니 다.나중에 포인터 b 도 이 메모 리 를 공유 하 기 를 원 합 니 다.그래서 a 할당 을(assign)b 에 게 주 었 습 니 다.이때 a 와 b 는 같은 메모 리 를 가리 키 고 있 습 니 다.a 가 더 이상 이 메모리 가 필요 하지 않 을 때 직접 방출 할 수 있 습 니까?정 답 은 부정 적 입 니 다.a 는 b 가 아직도 이 메모 리 를 사용 하고 있 는 지 아 닌 지 를 모 르 기 때 문 입 니 다.a 가 풀 리 면 b 는 이 메모 리 를 사용 할 때 프로그램 crash 를 일 으 킬 수 있 습 니 다.
2.1 중 assign 문 제 를 알 게 되면 어떻게 해결 합 니까?가장 간단 한 방법 은 인용 계수(reference counting)를 사용 하 는 것 입 니까?아니면 위의 예 를 사용 하 는 것 입 니까?우 리 는 그 메모리 에 인용 수 를 설정 합 니 다.메모리 가 할당 되 고 a 에 할당 되 었 을 때 인용 수 는 1 입 니 다.a 대 가 를 b 에 게 줄 때 인용 수 를 2 로 늘 립 니 다.이 때 a 가 이 메모 리 를 사용 하지 않 으 면
인용 수 를 1 로 줄 여 더 이상 이 메모 리 를 가지 고 있 지 않다 는 것 을 보 여 줘 야 한다.b.이 메모 리 를 더 이상 사용 하지 않 을 때 도 인용 수 를 1 로 줄 입 니 다.인용 계수 가 0 으로 바 뀌 었 을 때 이 메모리 가 더 이상 포인터 에 의 해 인용 되 지 않 고 시스템 이 직접 방출 할 수 있 음 을 의미 합 니 다.
const
변수 수정자,읽 기 권한 만 있 습 니 다.이 매개 변 수 는 읽 을 수 있 을 뿐 내용 을 수정 할 수 없습니다.누가 가까이 누 구 를 수식 하 는 지 뜻 합 니 다.
용도:1.테스트 에 편리 하고 신속하게 문 제 를 찾 을 수 있 습 니 다.
2 대형 알고리즘 이 라면 어느 모듈 에 오류 가 있 는 지 빠르게 찾 을 수 있 습 니 다.
수식 위치:

register

//register int b = 0;
변수 앞 에 register 수식 을 추가 하면 컴 파일 러 는 이 변 수 를 레지스터 에 우선 넣 습 니 다.이렇게 하면 이 변 수 를 여러 가지 조작 과 연산 을 할 수 있 습 니 다.(내장 프로 그래 밍 에 적용)물론 CPU 주변의 사용자 가 사용 할 수 있 는 빈 레지스터 는 유한 하기 때문에 여러 register 수식 변 수 를 정의 한 후에 사용 가능 한 레지스터 가 다 차지 합 니 다.뒤의 변 수 는 register 로 수식 하 더 라 도 역할 을 하지 않 고 일반 메모리 에서 변 수 를 위해 공간 을 엽 니 다.
static
때때로 우 리 는 작은 변수 로 특정한 함수 호출 횟수 를 기록 하여 이 문 제 를 해결 하 기 를 매우 희망 한다.
방법 1.전역 변 수 를 사용 할 수 있 습 니 다.그러나 모든 함수 가 수정 할 수 있 기 때문에 큰 프로그램 에 문제 가 생 겨 서 전역 변 수 를 사용 하 는 것 이 좋 지 않 습 니 다.
방법 2.목표 함수 에서 static 변 수 를 정의 할 수 있 습 니 다.또한 이 변수의 값 은 함수 정의 에서 만 사용 되 고 다시 할당 할 수 있 습 니 다.
extern

extern int n;
extern 은 전역 변수 나 함수 의 역할 범 위 를 확장 할 수 있 으 며,전역 변수 나 함수 만 extern 으로 확장 할 수 있 습 니 다.
extern 과 register 의 차이
extern 은 함수 의 역할 범 위 를 확장 할 수 있 고 파일 을 넘 어 확장 할 수 있 습 니 다.전 제 는 전역 변수 나 함수 가 정의 할 때 static 에 의 해 수식 되 지 않 았 다 는 것 입 니 다!
쉽게 말 하면 assign 수식 자 는 값 형식 과 id 형식(일반적으로 delegate)의 속성 을 수식 하 는 데 사 용 됩 니 다.주의해 야 할 것 은 id 형식의 속성 수식 자가 assign 을 사용 하면 이 속성 이 필요 하지 않 을 때 delegate 를 수 동 으로 비 워 야 합 니 다.이것 은 delegate 가 일반적으로 weak 로 수식 하 는 이유 입 니 다.
weak 과 strong 은 ARC 의 산물 로 약 한 인용 유형 과 강 한 인용 유형 을 나타 낸다.strong 에 수 정 된 속성 값 을 부여 할 때 속성의 지침 을 새 값 의 주 소 를 가리 키 며 이 새 값 을 가지 고 있 습 니 다(새 값 의 인용 수 는 1 이 추 가 됩 니 다).weak 에 수 정 된 속성 값 을 부여 할 때 속성의 바늘 을 새 값 의 주소 로 간단하게 가리 킬 뿐 새 값 을 가지 고 있 지 않 습 니 다.
retain 은 ARC 에서 기본적으로 strong 과 같다.
copy 는 강 한 인용 을 표시 하지만 새로운 값 을 가지 지 않 고 인용 계수 가 1 인 값 을 복사 하여 속성 에 줍 니 다.이러한 수정자 에 수 식 된 속성 대 가 를 부여 할 때,실제로는 새로운 값 을 copy 방법 으로 호출 한 후의 반환 값 을 속성 에 부여 합 니 다.NSString 유형 은 항상 copy 로 수식 합 니 다.즉,대상 을 수정 한 후에 이 대상 의 속성 을 강하 게 인용 하 는 데 불필요 한 영향 을 미 치 는 것 을 방지 하 는 것 입 니 다.
인용 형식 기본 수식 자 는 strong 입 니 다.
값 형식의 기본 수식 자 는 assign 입 니 다.

좋은 웹페이지 즐겨찾기