runtime-object_getClass 및 objcgetClass
class 방법은 하나의 클래스 대상이나 실례 대상을 통해 클래스objectgetClass는 하나의 클래스를 획득하는 원류나 루트 원류입니다. 이사를 통해 이사를 획득하는 것 자체가 클래스입니다. 대상마다 슈퍼class 바늘, 부류를 가리키며, 원류 바늘과 구분하기 주의
Class isa,
Class super_class
Class current = [ViewController class];
NSLog(@"current = %@--%p",NSStringFromClass(current),current);
Class baseClass = object_getClass(current);
NSLog(@"baseClass = %@--%p",NSStringFromClass(baseClass),baseClass);
Class class02 = object_getClass(baseClass);
NSLog(@"class02 = %@--%p",NSStringFromClass(class02),class02);
Class class03 = object_getClass(class02);
NSLog(@"class03 = %@--%p",NSStringFromClass(class03),class03);
인쇄 결과
TESTRuntime[13422:297689] current = ViewController--0x10a3c1dd8
TESTRuntime[13422:297689] baseClass = ViewController--0x10a3c1e00
TESTRuntime[13422:297689] class02 = NSObject--0x10b459ee8
TESTRuntime[13422:297689] class03 = NSObject--0x10b459ee8
분석 결과:current는 ViewController 클래스의 대상이고baseClass는 ViewController의 클래스 대상을 얻었다. 이름은 같지만 주소는 다르다class02와class03은 모두 루트 클래스 대상의 주소인class03의 주소는 근원류가 자신을 가리키고 폐환을 형성한다는 것을 증명했다.
objcgetClass의 차이
objc_getClass는 전송된 문자열에 따라 이 문자열에 대응하는 클래스 대상을 가져옵니다
//
IMP class_replaceMethod ( Class cls, SEL name, IMP imp, const char *types );
class_replaceMethod 함수, 이 함수의 행위는 두 가지로 나눌 수 있습니다. 클래스에name이 지정한 방법이 존재하지 않으면class 와 유사합니다.addMethod 함수와 같이 방법이 추가됩니다.클래스에name이 지정한 방법이 이미 존재하면method 와 유사합니다setImplementation과 같이 원래 방법의 실현을 대체합니다.
주의, 만약에 부류의 방법을 바꾸었지만 자류가 스스로 부류의 방법을 실현했다면 자류의 방법이 부류를 낚지 못했을 때 자류의 방법은 바뀌지 않을 것이다
클래스의 대상을 가져오는 방법
4.class_getClassMethod
하나의 클래스를 얻는 방법은
사용 시 인코딩에 같은 이름의 대상과 클래스 방법이 동시에 존재할 수 있고 반드시 실현되어야 하며, 성명만 있으면 예를 들어
- (void)name {
}
+ (void)name {
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.