@property 키워드의 차이점:assign과 weak,Block 및weak,strong,copy

1758 단어

assign과 weak의 차이


assign은 기본 데이터 형식, weak은 NSObject 객체
Q:assign은 사실 대상을 수식할 수 있는데 왜 대상을 수식하지 않나요?assign으로 장식된 대상이 놓인 후에도 바늘의 주소가 존재한다. 즉, 바늘이 nil로 설정되지 않아 야생 바늘을 만든다는 것이다.
Q:왜 assign으로 기본 데이터 형식을 수식할 수 있습니까?기본 데이터 형식은 일반적으로 창고에 분배되고 창고의 메모리는 시스템이 자동으로 관리하기 때문에 야외 지침을 만들지 않는다
weak 수식의 대상이 풀리면 바늘 주소가nil로 설정됩니다.
장면 사용
  • 블록에서.ARC에서는 순환 인용이 발생할 수 있으므로 순환 인용을 피하기 위해 weak으로 해결할 수 있다.delegate 프록시 속성과 같이 weak 키워드를 자주 사용합니다
  • IBOutlet 컨트롤 속성자신이 이미 강인용을 한 번 했기 때문에 다시 강인용할 필요가 없기 때문에 weak을 사용할 수 있다.
  • strong과copy의 차이

  • strong과copy는 인용 계수를 1로 추가하지만strong 두 바늘은 같은 메모리 주소를 가리키고copy는 메모리에서 대상을 복사하며 두 바늘은 다른 메모리 주소를 가리킨다.
  • 얕은 복사와 깊은 복사


    얕은 복사 후의 내용은 원시 내용 포인터 주소와 같이 깊이 복사된 내용은 원시 내용 관련 대상의 복사를 가리키며 원시 내용 포인터 주소와 다르다(깊이 복사는 요소마다 copy 메시지를 보내고 복사된 요소로 set을 만든다)
    간단히 말하면 포인터 복제본, 컨텐츠 복제본
    [immutableObject copy];  //  
    [immutableObject mutableCopy];  //  
    [mutableObject copy];  //  
    [mutableObject mutableCopy];  //   
    

    __Block 및차이점


    __Block 수식 변수, Block 코드 블록에서 수정 가능
    __weak 수식 변수는 Block 블록에서retain에 의해 변경되지 않습니다
    __weak typedof(self) weakSelf = self;
    

    Block 변수 정의는 왜copy를 사용합니까?Block은 어디에 두나요?


    Block 자체도 하나의 대상이다.Block을 만들 때 메모리 주소는 창고에 분배되어 언제든지 회수될 수 있습니다.Block 자체의 역할 영역은 만들 때의 역할 영역에 속하며, 만들 때의 역할 영역을 Block으로 바꾸면 프로그램이 붕괴될 수 있습니다.copy는 Block을 무더기로 복사할 수 있으며, Block의 성명 영역 밖에서 사용할 수 있습니다

    스택과 힙합 쌓기


    stack heap .bss .data .text

    창고 구역


    LIFO, 자동 할당일반 방함수 매개 변수 값, 국부 변수 값 등.컴파일러가 자동으로 생성하고 방출합니다.

    퇴적 구역


    메모리 생성 크기를 스스로 신청할 수도 있고, 스스로 풀어야 한다.

    Block은 왜 strong을 안 써요?


    Block이 self를 사용하면 리타인 self가 되고,strong이 수식되면 순환 인용이 발생합니다.

    좋은 웹페이지 즐겨찾기