둘 사이에는 몇 가지 차이점이 있습니다. objc_msgSend(sendMessage:)는 해제된 객체에서 메서드가 호출되기 때문입니다.
이 블록에서 자체를 강력하게 캡처하면 유지 주기가 발생할 가능성이 높습니다 생성된 객체가 해제되지 않게 됩니다. 예를 들어 vc를 입력할 때마다 새로 생성됩니다. vc의 블록에는 self에 대한 강력한 참조가 있습니다. 이로 인해 해당 VC를 출시할 수 없게 됩니다. 들어갈 때마다 새로운 VC가 생성되며 이전 VC는 계속 존재하게 됩니다. 마지막으로 애플리케이션은 너무 많은 메모리를 차지하므로 시스템에서 삭제됩니다.
이렇게 하면 메모리 누수가 발생하지만 충돌이 발생하는지 여부는 상황에 따라 다릅니다. 예를 들어 특정 VC가 알림을 등록했지만 순환 참조로 인해 올바르게 공개되지 않았습니다. 그 후 알림이 다른 곳에 게시되면 VC는 해당 작업을 수행할 것입니다. 출시되면 충돌이 발생할 수 있습니다. libobjc.A.dylib objc_msgSend(sendMessage:)와 같은 오류를 찾는 것은 어렵습니다.
둘 사이에는 몇 가지 차이점이 있습니다.
objc_msgSend(sendMessage:)는 해제된 객체에서 메서드가 호출되기 때문입니다.
이 블록에서 자체를 강력하게 캡처하면 유지 주기가 발생할 가능성이 높습니다
생성된 객체가 해제되지 않게 됩니다.
예를 들어 vc를 입력할 때마다 새로 생성됩니다. vc의 블록에는 self에 대한 강력한 참조가 있습니다.
이로 인해 해당 VC를 출시할 수 없게 됩니다. 들어갈 때마다 새로운 VC가 생성되며 이전 VC는 계속 존재하게 됩니다. 마지막으로 애플리케이션은 너무 많은 메모리를 차지하므로 시스템에서 삭제됩니다.
가능하지만 가능성은 낮지만 순환 참조를 제거해야 합니다.
이렇게 하면 메모리 누수가 발생하지만 충돌이 발생하는지 여부는 상황에 따라 다릅니다.
예를 들어 특정 VC가 알림을 등록했지만 순환 참조로 인해 올바르게 공개되지 않았습니다. 그 후 알림이 다른 곳에 게시되면 VC는 해당 작업을 수행할 것입니다. 출시되면 충돌이 발생할 수 있습니다.
libobjc.A.dylib objc_msgSend(sendMessage:)와 같은 오류를 찾는 것은 어렵습니다.
Fabric을 사용해 보실 수 있습니다.