런타임시 개체의 수퍼 클래스를 변경할 수 있습니까? 그렇다면 어떻게?동적으로 개체의 수퍼 클래스 변경
답변
짧은 질문, 짧은 답 : 나는, 그것은 REST-API에 연결을 처리하는 클래스입니다했다
: 예, ISA는
What Makes Objective C Dynamic?, page 66
예를 스위 즐링 APIClient라고합니다. 테스트에서 다른 서버에 연결하려고합니다. 테스트 대상에서
나는 내가 스위 즐링 # import를을 수행 단위 테스트 클래스에서 APIClient#import "ApiClient.h"
@interface TestApiClient : ApiClient
//…
@end
@interface TestApiClient()
@property (nonatomic, strong, readwrite) NSURL *baseURL;
@end
@implementation TestApiClient
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
{
self.baseURL = [NSURL URLWithString:@"http://localhost:8000/"];
return [super requestWithMethod:method path:path parameters:parameters];
}
@end
를 서브 클래 싱이 CAS 내가 처음의 서브 클래스를 생성로 저장입니다
@implementation APIUnitTests
+(void)load
{
client = [[ApiClient alloc ] init];
object_setClass(client, [TestApiClient class]);
}
//…
@end
기본 클래스로 변경 한 다음 하위 클래스를 하위 클래스로 바꿉니다. 서브 클래스도 기본 클래스이므로 유효한 상속입니다.
이것은 매우 위험합니다. 왜 지구상에서 너는하고 싶니? –
바로 끝나면 매우 강력합니다. 사과는 KVO 용으로 사용합니다. http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/Articles/KVOImplementation.html – vikingosegundo
개인적으로 검사에 사용합니다. 코드 : 나는 정보를 기록하고 super에서 원래의 메소드를 호출하기 위해 관심이있는 메소드를 서브 클래 싱하고 덮어 쓴다. – vikingosegundo
확실히 ObjC 런타임을 사용하는 것이 가능하지만 약간 털이 될 것입니다 ... 이것은 Apple의 문서에 대한 링크입니다 : Objective-C Runtime 및 그 사용 예 : Objective-C Runtime Programming.
- 1. 수퍼 클래스 또는 개체의 인터페이스를 확인하는 방법
- 2. 리플렉션을 사용하여 Java 클래스 수퍼 클래스 변경
- 3. 수퍼 클래스 개체의 하위 클래스 인스턴스 변수는 무엇입니까?
- 4. 동적으로 CSS 클래스 변경
- 5. 수퍼 클래스에서 초기화 된 하위 클래스 개체의 메서드 호출시 크래시
- 6. 루프없이 클래스 스타일을 동적으로 변경
- 7. 수퍼 클래스 인스턴스에서 클래스 구성
- 8. 수퍼 클래스 속성이없는 클래스 속성
- 9. 수퍼 클래스 --- 패키지 대 클래스
- 10. 서브 클래스 및 수퍼 클래스
- 11. 수퍼 클래스 및 서브 클래스 해상도?
- 12. 수퍼 클래스의 수퍼 클래스 메소드를 호출합니까?
- 13. 수퍼 클래스 또는 그냥 setTitle을 사용하여 수퍼 클래스 생성자를 호출합니까?
- 14. 수퍼 클래스의 유형을 변경
- 15. actionscript : 수퍼 클래스의 서브 클래스 변수를 변경하십시오.
- 16. globalBindings 수퍼 클래스
- 17. 수퍼 클래스로 전달 클래스
- 18. Autowiring Spring 수퍼 클래스
- 19. 값으로 HashTable 수퍼 클래스
- 20. 루비 수퍼 클래스
- 21. 수퍼 클래스 숨기기 방법
- 22. 수퍼 클래스 awakeFromNib 호출
- 23. greendao 설정 수퍼 클래스
- 24. 수퍼 클래스의 클래스 자동로드
- 25. 자바 수퍼 클래스 상속
- 26. JavaScript Prototype 수퍼 클래스
- 27. 슈즈가없는 수퍼 클래스 메소드
- 28. 수퍼 클래스 생성자를 오버플로
- 29. 로그인을위한 자바 수퍼 클래스 사용자
- 30. 개체의 수퍼 클래스를 __init__에 설정 하시겠습니까?
isa swizzle의 예는 http://stackoverflow.com/questions/11221110/my-isa-swizzling-breaks-kvo를 참조하십시오. – mttrb
또한 "객체의 수퍼 클래스"는 무엇을 의미합니까? * 객체 *에는 수퍼 클래스가 없습니다. 객체에는 클래스가 있고 클래스에는 수퍼 클래스가 있습니다. 그러나 개체 클래스의 수퍼 클래스를 변경하면 해당 클래스의 모든 구성원이 영향을받습니다 ** ** 단일 개체 만이 아닙니다. –
수퍼 클래스가 현재 클래스가 아닌 이유는 무엇입니까? 현재 수업은 어떻게됩니까? 먼저 신중히 생각해야합니다. –