[Objective-c 베이스 - 3.2] ARC
6168 단어 Objective-C
1. ARC의 판단 원칙: 강한 지침이 대상을 가리키지 않으면 즉시 대상을 석방한다
다음과 같은 경우 메모리가 즉시 회수됩니다.
(1) 포인터가 역할 영역을 초과한다
1 {
2 Person *p1 = [[Personalloc] init];
3 p1.name = @"p1";
4 NSLog(@"1");
5 }// p1 , p1
6
7 NSLog(@"2");
out:
2014-11-21 00:14:59.980 01-autorelease
기본 개념
[4282:263265] 1 2014-11-21 00:14:59.981 01-autorelease
기본 개념
[4282:263265] Person - p1
회수됐어요.
2014-11-21 00:14:59.981 01-autorelease
기본 개념
[4282:263265] 2
(2) 바늘이 다른 대상을 가리킨다
1 Person *p1 = [[Personalloc] init];
2 NSLog(@"1");
3 p1.name = @"p1";
4 NSLog(@"2");
5 p1 = [[Personalloc] init]; // p1 ,
6 NSLog(@"3");
out:
2014-11-21 00:10:52.263 01-autorelease
기본 개념
[4248:261439] 1 2014-11-21 00:10:52.264 01-autorelease
기본 개념
[4248:261439] 2 2014-11-21 00:10:52.264 01-autorelease
기본 개념
[4248:261439] Person - p1
회수됐어요.
2014-11-21 00:10:52.264 01-autorelease
기본 개념
[4248:261439] 3
2014-11-21 00:10:52.264 01-autorelease 기본 개념[4248:261439] Person-p2 회수
(3) 포인터 설정nil
1 Person *p1 = [[Personalloc] init];
2 p1.name = @"p1";
3 NSLog(@"1");
4 p1 = nil; // p1 nil,
5 NSLog(@"2");
out:
2014-11-21 00:12:49.289 01-autorelease
기본 개념
[4266:262528] 1 2014-11-21 00:12:49.291 01-autorelease
기본 개념
[4266:262528] Person - p1
회수됐어요.
2014-11-21 00:12:49.291 01-autorelease
기본 개념
[4266:262528] 2
강약 포인터:
(1) 강력한 포인터: 사용strong 수식, 기본적으로 모든 바늘은 강한 바늘입니다
(2) 비고정 포인터: 사용장식
2. ARC를 시작하면 @property 속성은retain을 사용할 수 없습니다.retain은strong으로 대체됩니다(오류가 발생하지 않습니다. 효과는weak는 assign,strong은 strain과 같습니다)
@property(nonatomic,strong)Dog*dog;
strong과 weak 두 가지 포인터 종류가 있습니다. 선택할 수 있습니다.
3. ARC의 특징
(1) release, retain, retainCount을 호출할 수 없음
(2) dealloc를 다시 쓰는 것을 허용하지만 [super dealloc]를 호출하는 것을 허용하지 않습니다. 사실 다시 쓰지 않는 구성원의 대상도 자동으로 방출됩니다.
(3) @property 매개 변수
a.strong: 구성원 변수는 강력한 지침(OC 대상 유형에 적용)
b.weak: 구성원 변수는 약한 지침(OC 대상 유형에 적용)
c.assign: 비 OC 객체 유형에 적용
-> 이전 Retain에서 strong으로 변경
B.XCode의 ARC 변환
1. 재구성 전환
Edit -> Refactor -> Convert to ARC for Objective c
함수, dealloc의release 코드 자동 제거
2. ARC가 필요 없는 코드 파일을 수동으로 지정
프로젝트 -> Build Phase -> 코드 파일 더블 클릭-> 매개 변수 "-fno-objc-arc"추가
매개변수:
(1) - fno-objc-arc: ARC 비활성화
(2) - f-objc-arc: ARC 켜기
C. 반복 참조
서로 strong 인용 대상을 사용하면 방출될 수 없습니다
해결: 한 쪽은 weak 인용을 사용하고,한 쪽은strong 인용을 사용합니다
——————Person.h———————
1 @classDog;
2 @interfacePerson :NSObject
3 @property(nonatomic,strong)Dog*dog;
4 @end
——————Dog.h————————
1 @classPerson;
2 @interfaceDog :NSObject
3 @property(nonatomic,weak)Person*person;
4 @end
비 ARC 솔루션 비교: 한쪽은retain을 사용하고 다른 한쪽은assign을 사용합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.