사남봉자늙은 당나귀
// * Returns a specified instance method for a given class.
:Method class_getInstanceMethod(Class cls, SEL name)
// * Returns the implementation of a method.
:IMP method_getImplementation(Method m)
// * Returns a string describing a method's parameter and return types.
:const char method_getTypeEncoding(Method m)
// * Adds a new method to a class with a given name and implementation.
:BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)
// * Replaces the implementation of a method for a given class.
:IMP class_replaceMethod(Class cls, SEL name, IMP imp, const char *types)
// * Exchanges the implementations of two methods.
:void method_exchangeImplementations(Method m1, Method m2)
#import "Test.h"
#import
void SwizzleMethod(Class clazz, SEL origin, SEL current) {
Method originMethod = class_getInstanceMethod(clazz, origin);
Method currentMethod = class_getInstanceMethod(clazz, current);
IMP originIMP = method_getImplementation(originMethod);
IMP currentIMP = method_getImplementation(currentMethod);
const char * originType = method_getTypeEncoding(originMethod);
const char * currentType = method_getTypeEncoding(currentMethod);
BOOL success = class_addMethod(clazz, origin, currentIMP, currentType);
if (success) {
class_replaceMethod(clazz, current, originIMP, originType);
} else {
method_exchangeImplementations(originMethod, currentMethod);
}
}
@implementation Test
+ (void)load {
SwizzleMethod([self class], @selector(method1), @selector(method2));
SwizzleMethod([self class], @selector(method1), @selector(method3));
}
- (void)method1 {
NSLog(@"a");
}
- (void)method2 {
NSLog(@"b");
[self method2];
}
- (void)method3 {
NSLog(@"c");
[self method3];
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
Test *text = [[Test alloc] init];
[text method1];
NSLog(@"---------------------");
[text method2];
NSLog(@"---------------------");
[text method3];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.