objective-c 런타임에는 class_createInstance와 같은 객체를 직접 생성 할 수있는 함수가 있다는 것을 알고 있습니다. 내가 알고 싶은 것은 루트 클래스 (NSObject) alloc 메서드가 아닌 다른 함수가 실제로 사용된다면 말입니다. 나는 KVC 바인딩과 같은 것들을 생각하지만, 그것들은 아이폰 OS에 존재하지 않는다. (내가 잘못하면 내 지식을 수정해라.) 이렇게 할 수있는 것이 있는가?목표에있는 객체가 -c alloc을 거치지 않고 생성 되었습니까?
궁금한 점이 있으시면 클래스에 ivars를 선언하지 않고 objc 런타임을 우회하는 방식으로 인스턴스의 크기를 할당하려고합니다. + alloc 메서드를 재정의하고 class_createInstance (자기, 마디의 바이트 수).
감사
편집 나는 좀 더 구체적으로해야한다고 생각. 런타임에 클래스를 런타임에 추가하고, 아마도 같은 클래스의 변경된 버전을 언로드하고 다시로드합니다. 나는 class_addMethod와 같은 것들 때문에 대부분의 이슈들을 해결해 왔지만 클래스가 등록 된 후에는 ivars에 해당하는 것이 없다. 내가 생각할 수있는 두 가지 해결책은 런타임과 관련하여 실제 ivars가 없다는 것입니다. 그러나 alloc을 오버라이드하여 extraBytes를 통해 충분한 공간을 확보하는지 확인하거나 또는 실제 ivars에 대한 포인터 인 ivar을 대신 선언합니다 , 나는 내가 원하는 것을 무엇이든 할 수있다. 이전 전략을 사용하는 것을 선호하지만 무언가가 오버로드 된 alloc 메소드를 거치지 않고 객체의 인스턴스를 할당하는 경우와 같이 잘못 될 수있는 여러 가지가 있습니다. 누구든지 이런 것들을 알고 있습니까?
오,하지만 방금 한 일을 보았습니다. 좋아요, 재미있게 놀아도 괜찮습니다.하지만 실제로 사용하려고하지는 않습니다. 그것은 당신이 후회하고 당신이 방금 그것을 빨아 들여 그것을 정상적인 방식으로 해주기를 바랄만한 종류의 해킹입니다. 프레임 워크에서 범용 해킹을 사용하는 것이 좋을 것입니다. 프레임 워크에서는 gc가 전화기에 추가 된 경우 올바르게 가비지 수집에 적응할 수 있습니다. 당신은 ivars to ivars 일을 할 수도 있고, objc_getAssociatedObject/objc_setAssociatedObject를보고 싶을 수도 있습니다. 이것들은 기본적으로 객체에 여분의 내용에 대한 사전이있는 것을 자동화합니다. – Ken
다른 한편, 컴파일/실행/디버그주기를 단축하고 앱에서 제공하는 내용이 사용되지 않으면 재미 있고 재미있게 들립니다. :-) ZeroLink,를보고 싶을 지 모르지만. 이것은 개발 속도를 높이기위한 것이었고 당신이 설명하고, 코드를 다시로드하는 등의 작업을했습니다. 애플은 그걸 포기했지만 이상한 문제에 대한 해결책은 "제로락 끄기"였다. –
Ken
나는 이것을 allocWithZone :과 NSLock 예제에 대해 투표했습니다. 그러나 allocWithZone을 통해 호출하지 않는 항목을 충족시키지 못하기 때문에이 사실을 아직 받아 들일 수 없습니다. 또한 이것은 프로덕션 코드의 기초가 될 것이므로 NSLock 예제로 인해이 방법을 사용하지 않을 것입니다. 결국이 기술을 사용하는 NSLock 하위 클래스가 깨지게됩니다. –