[Objective-c 베이스 - 3.2] ARC

6168 단어 Objective-C
A.ARC의 기본 원리
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을 사용합니다

좋은 웹페이지 즐겨찾기