프로젝트에 J2ObjC를 사용하고 있습니다. 나는 모든 것을 설정했고 Java 클래스를 포함했습니다.Java (J2ObjC)에서 추출한 신속한 비 ARC Objective-C 클래스에서 인스턴스를 생성하고 있습니다. 누출되지 않았습니까?
Java 코드베이스가 번역/컴파일되지 않으므로 ARC를 사용 중지해야한다는 점에 유의하십시오. (J2ObjC 자체는 호가 비활성화 된 상태에서 사용하는 것이 좋습니다)
생성 된 파일 만 비활성화 할 수 없으므로 Project Inspector -> 대상 -> 빌드 설정 -> Apple LLVM 8.0 - 언어에서 Objective-C를 사용하지 않도록 설정했습니다.
그런 다음 Swift에서 내 ViewController를 만들고 Java에서 변환 된 클래스 (브리징 헤더에 포함 된 생성 된 .h 파일의 헤더)로 인스턴스화하지 않고 인스턴스화했습니다. 내가 ARC없이 Obj-C VC에서해야 할 dealloc/release를하지 말아야한다.
정상입니까/누출이 있습니까? 누설 안전 (Reach-safe)이란 말은 변환 된 클래스 객체를 인스턴스화하면 참조 횟수가 감소한 후 자동으로 ARC로 할당이 해제된다는 것입니다. (ARC는 Swift에서 비활성화 할 수 없습니다.)
Java 클래스에서 참조주기를 조심해야한다는 것을 알고 있지만 이는 누설 방지가 의미하는 바가 아닙니다.
아마 이해가 안되지만, 프로젝트에서 ARC를 해제하여 이식 된 코드를 컴파일하면 ARC가 발생하지 않습니다. 자동 릴리즈되지 않은 것을 명시 적으로 릴리스해야합니다. '-fno-objc-arc'로 이식 된 코드 만 컴파일하는 것은 어떨까요? – danh
비 -ARC 파일은 빌드 중에 j2objc에 의해 생성되고 빌드 단계에서는 나타나지 않고 Java 명령은 나타나지 않고 명령이 아무 효과가 없기 때문에 내가 할 수 없었습니다. 예, 프로젝트에서 ARC를 사용하지 않도록 설정 했으므로 Swift는 기본적으로 ARC이므로 변경할 수 없습니다. 컴파일러가 경고 또는 오류를 표시하지 않기 때문에 여전히 적용되는지 궁금합니다. – BlackBox
objective-C 태그가 날 버렸다. – danh