Objective - c 학습 노트 03 - 메모리 관리
Objective - C 는 apple 가족 계열 제품 의 소프트웨어 를 개발 할 수 있 습 니 다. 여 기 는 필기 로 기록 되 어 있어 나중에 복습 하기에 편리 합 니 다.
1 메모리 관리: 메모리 관 리 는 프로 그래 밍 에서 자주 사용 하 는 자원 관리의 일부분 으로 모든 컴퓨터 시스템 에서 프로그램 이 사용 할 수 있 는 자원 이 유한 합 니 다. 이 자원 들 은 메모리, 파일 을 여 는 수량 과 네트워크 연결 등 을 포함 합 니 다.2 메모리 관 리 를 왜 사용 합 니까? 프로그램 이 실 행 될 때 운영 체 제 는 사용 하 는 자원 을 회수 합 니 다.그러나 프로그램 이 실행 되 고 있 는 한 자원 을 계속 점용 할 것 이다.사용 하지 않 는 자원 을 제때에 정리 하지 않 으 면 자원 이 소 진 되 고 프로그램 이 무 너 집 니 다.모든 프로그램 은 메모 리 를 사용 합 니 다. 필요 할 때 메모 리 를 할당 하고 프로그램 이 끝 날 때 사용 하 는 메모 리 를 사용 해 야 합 니 다.만약 우리 가 메모리 만 분배 하 는 것 이 아니 라 메모리 누 출 이 발생 할 것 이다. 프로그램의 메모리 사용량 이 계속 증가 하고 감소 하 며 결국은 소모 되 고 프로그램 이 붕 괴 될 것 이다.주: 방금 방출 된 메모 리 를 사용 하지 마 십시오. 그렇지 않 으 면 우 리 는 오래된 데 이 터 를 잘못 사용 하여 여러 가지 문 제 를 일 으 킬 수 있 습 니 다.3 소유권 메커니즘: 1 > 한 대상 에 대해 alloc, copy 또는 retain 등 을 조작 한 후에 야 소유권 을 가 질 수 있 습 니 다.2 > 당신 이 이 상 대 를 필요 로 하지 않 을 때, 당신 은 그 에 대한 소유권 을 석방 해 야 합 니 다.3 > 소유권 이 없 는 대상 에 게 석방 작업 을 수행 할 수 없습니다.
IOS 의 메모리 관리 체 제 는 가상 메모 리 를 지원 하지 않 기 때문에 모든 메모리 가 부족 한 상황 에서 RAM 에 가상 메모 리 를 만 들 지 않 습 니 다.그래서 만약 에 메모리 가 부족 한 상황 이 발생 하면 ios 플랫폼 은 이미 실 행 된 모든 앱 에 게 안내 합 니 다. 프론트 앱 이 든 백 스테이지 에 걸 린 앱 이 든 모두 받 을 수 있 습 니 다. memory warning 통지 앱 받 으 면 memory waring 의 notice 메모리 사용량 이 많은 변 수 를 회수 해 야 합 니 다.
4 메모리 경보 처리 절차: 1. 앱 은 시스템 에서 보 내 온 memory waring 의 notice 2 를 받 고 앱 은 비교적 큰 메모 리 를 사용 합 니 다.3. 시스템 은 이 앱 이 만 든 atutorelease 의 대상 을 회수 합 니 다.4. 앱 이 열 린 페이지 로 되 돌아 갈 때 시스템 은 viewdidload 방법 을 다시 호출 하고 view 는 페이지 데 이 터 를 다시 불 러 와 다시 표시 합 니 다.
메모리 관리
1 자동 쓰레기 수집
objective - c 는 쓰레기 회수 가 있 습 니 다. iOS 운영 환경 은 쓰레기 수집 을 지원 하지 않 습 니 다. 이 플랫폼 에서 프로그램 을 개발 할 때 이런 선택 이 없고 Mac OS 프로그램 개발 에 만 사용 할 수 있 기 때문에 자세 한 설명 은 하지 않 습 니 다.Mac OS 프로그램 을 개발 하고 쓰레기 수 거 를 사용 하려 면 Xcode 컴 파일 러 에서 다음 과 같은 옵션 을 열 어야 합 니 다. (Build Setting) - > Apple LLVM copiler 3.0 - > Language 에 Objective - c Garbage Collection 을 설정 하고 기본 설정 Unsupported 를 Required 로 변경 하면 동적 쓰레기 수집 으로 재 구축 합 니 다.쓰레기 수집 은 프로그램 이 실 행 될 때 발생 합 니 다. 시스템 이 메모리 가 낮은 위치 에 있 는 것 을 감지 하면 청 소 를 시작 합 니 다. 이것 은 계산 이 밀집 되 어 있 는 과정 입 니 다. 시스템 은 모든 대상 과 인용 을 추적 하고 대상 이 사용 되 고 있 는 지 확인 합 니 다. 이것 은 응용 단말 기 를 일 으 킬 수 있 습 니 다.메모리 로 특성 을 수집 하 는 것 처럼 추천 하지 않 는 이유 다.
2 메모리 관리 범위: NSObject 의 대상 을 계승 하고 alloc, copy, mutableCopy, New 를 접두사 로 만 드 는 방법 으로 만 든 대상 은 자동 으로 풀 리 지 않 으 며 수 동 관리 가 필요 합 니 다.인용 계수: 대상 이 생 성 될 때 인용 계수 가 있 고 기본 값 은 1 이 며 인용 계수 가 0 일 때 대상 은 시스템 에 의 해 삭 제 됩 니 다.소유권 을 얻 고 소유권 을 포기 하 는 방법: 프린터 카운터: 대상 에 게 retainCount 메 시 지 를 보 내 현재 인용 계 수 를 얻 습 니 다. 반환 값 은 부호 가 없 는 긴 정형 입 니 다. 다음 문장 으로 인쇄 할 수 있 습 니 다.
NSLog(@“%zi”,[stu retainCount]);
그러나 다른 이유 로 retainCount 의 최소 값 은 1 입 니 다.소유권 획득: alloc: 새로운 대상 에 게 메모 리 를 할당 하고 인용 수 를 1. alloc 방법 으로 설정 하면 새로운 대상 의 소유권 을 가 집 니 다.retain: 대상 의 인용 계수 + 1 이 며 대상 의 소유권 을 획득 합 니 다.copy: 기 존 대상 의 던 전 을 만 듭 니 다. 이 던 전의 인용 수 는 1 입 니 다. 이 던 전의 소유권 을 호출 하고 할당 전에 기 존 대상 을 방출 한 다음 에 할당 합 니 다.사실 copy 도 이렇게 이해 할 수 있 습 니 다. 지침 A 와 지침 B 가 서로 관련 되 고 싶 지 않 으 면 A 는 A 의 메모리, B 는 B 의 메모리, copy 는 이것 을 위해 태 어 났 습 니 다.소유권 포기: release: 대상 의 인용 계수 에서 1 을 줄 이 고 대상 의 소유권 을 언제 포기 합 니까?autorelease: 대상 의 인용 수 는 미래 어느 때 1 을 줄 이 고 그 때 대상 의 소유권 을 포기 하 는 것 입 니 다. 현재 인용 수 는 변 하지 않 았 습 니 다.인용 계수 가 0 일 때 시스템 은 NSObject 에서 계승 하 는 dealloc 방법 을 자동 으로 호출 하여 메모리 를 방출 한 다음 에 대상 이 만 들 거나 유지 하 는 인 스 턴 스 변수 나 다른 대상 을 방출 하기 위해 Dealloc 방법 을 복사 해 야 하지만 dealloc 방법 을 직접 호출 하 는 것 은 권장 하지 않 습 니 다. 이것 은 시스템 에서 호출 되 기 때 문 입 니 다.메모리 관리 원칙: \ # 누가 만 들 고 누가 방출 합 니까? (물 오염, 누가 관리 합 니까?) alloc, new 또는 copy 를 통 해 대상 을 만 들 면 release 나 autorelease 를 호출 해 야 합 니 다. \ #일반적으로 alloc, new 또는 copy 이외 의 방법 으로 만 든 대상 은 autorelease 로 밝 혀 집 니 다. \ #누가 retain, 누가 release.retain 을 호출 하면 이 대상 이 어떻게 생 성 되 든 release 를 호출 해 야 합 니 다.대상 간 메모리 관리
3. 자동 인용 계수 (ARC)
Wait! 이곳 은 잠시 비어 있다.
이 항목 은 objective - c 분류 디 렉 터 리 에 발표 되 고 objective - c 를 붙 였 습 니 다. 메모리 관리 탭.고정 링크 를 즐겨 찾기 폴 더 에 추가 합 니 다.
다음으로 전송:https://www.cnblogs.com/simman/p/3377978.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.