obj-c에서 Autorelease, 띠 정의Property, 대상의 작업
2857 단어 직장레저띠 정의Property객체 작업
질문 1:
- value = [array objectAtIndex:n]; //
- [arry removeObjectAtIndex:n]; //
value는 그 대상을 얻었지만, 다른 소유자release가 이 대상을 얻었기 때문에, 사실value는 현재 흔들림 바늘이 되었습니다. (무효 데이터)
질문 2:
- myArray = [NSArray array]; ... [myArray release];
NSArray가 되돌아오는 것은 자동 방출 대상이다. myArray가 일정 시간 후에release가 아니라 적당한 시기에retain을 먼저 해서 시스템에의해 잘못 방출되는 것을 방지해야 한다.
질문 3:
- rocket = [rocketLauncher aRocket]; [rocketLauncher release];
array와 같은 데이터 수집 클래스의 대상과 마찬가지로 만약에 우리가 하나의 클래스의 하위 대상을 얻었는데retain이 그것을 얻지 않는다면 원래의 부류가 방출되었을 때 이 rocket은 사실 그 의미를 잃게 될 것이다.
Autorelease에 대한 오해
코코아의 메모리 관리는 색인 계수법(Reference Counting/Retain Count)과 스팸 수집법(Garbage Collection)으로 나뉜다.아이폰은 현재 전자만 지원하기 때문에 오토레지스트는 많은 사람들의 지름길이 된다.하지만!Autorelease는 사실'자동 방출'이 아니라 쓰레기 수집법처럼 대상 간의 관계를 탐지한 결과 쓰레기를 발견하고 삭제하는 것이 아니다.그러나 Autorelease는 사실 '지연 방출' 으로 운행 주기 후에 Autorelease로 표시되면 방출된다.
Autorelease를 조심스럽게 사용하고 Autorelease를 이해하면 그 대상이 필요할 때 시스템에서 방출되지 않도록 해야 한다.
속성 항목의 정의Property
- @property (copy, nonatomic) NSString *title;
assign,copy,retain의 차이는 무엇입니까?
assign: 색인 개수를 변경하지 않고 간단하게 값을 지정합니다.
copy: 색인 계수가 1인 대상을 만들고 옛 대상을 방출합니다
retain: 오래된 대상을 방출하고, 오래된 대상의 값을 입력 대상에게 부여하고, 입력 대상의 색인 계수를 1retain으로 높이는 실제 문법은 다음과 같다.
- - (void)setName:(NSString *)newName { if (name != newName) { [name release];
- name = [newName retain]; // name’s retain count has been bumped up by 1 } }
그렇게 번거롭게 말했는데, 사실 다음 말이 가장 중요하다.
?만약 당신이 그들을 어떻게 사용하는지 모른다면, 이렇게 ->
assign 사용: 기본 데이터 형식(NSInteger, CGFloat)과 C 데이터 형식(int,float,double,char 등)
copy 사용: NSString
retain 사용: 다른 NSObject 및 하위 클래스 nonatomic 키워드:
nonatomic는 Objc가 사용하는 루틴 보호 기술로 기본적으로 말하면 쓰기가 완료되지 않았을 때 다른 루틴에 의해 읽혀져 데이터 오류가 발생하는 것을 방지하는 것이다.이런 메커니즘은 시스템 자원을 소모하기 때문에 아이폰과 같은 소형 장치에서 다중 스레드 간의 통신 프로그래밍을 사용하지 않았다면nonatomic는 매우 좋은 선택이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
양식 제출 후 제출 버튼 비활성화텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.