zoukankan      html  css  js  c++  java
  • Working with Methods

    1. method_invoke

    Note: way to eliminate compiler warnning

            . ENABLE_STRICT_OBJC_MSGSEND = NO; 

            . int (*action)(id, SEL, int) = (int (*)(id, SEL, int)) objc_msgSend;

    Description:   Calls the implementation of a specified method.

    Declaration: id method_invoke(id receiver,Method m, ...) 

    Example:

    @interface KSModel4CheckMethod : NSObject
    
     + (void)classPrint;
     - (void)instancePrint;
     @end
    
     @implementation KSModel4CheckMethod
    
     #define PRINT_CMD NSLog(@"%@", NSStringFromSelector(_cmd))
    
     + (void)classPrint {
        PRINT_CMD;
    }
    
    - (void)instancePrint {
        PRINT_CMD;
    }
    @end
    
    #import <Foundation/Foundation.h>
    #import <objc/runtime.h>
    #import <objc/message.h>
    #import "KSModel4CheckMethod.h"
    
    void test_0_getName_NSString();
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            test_0_method_invoke();
        }
        return 0;
    }
    
    void test_0_method_invoke() {
    
        KSModel4CheckMethod *instance = [[KSModel4CheckMethod alloc] init];
        Class clazz = [KSModel4CheckMethod class];
        Method clazz_method = class_getClassMethod(clazz, @selector(classPrint));
        Method instance_method = class_getInstanceMethod(clazz, @selector(instancePrint));
    
    //    Method clazz_method = class_getClassMethod(clazz, @selector(instancePrint));
    //    Method instance_method = class_getInstanceMethod(clazz, @selector(classPrint));
    //    method_invoke(clazz, nil);
    //    method_invoke(instance, nil);
    
        method_invoke(clazz, clazz_method);
        method_invoke(clazz, instance_method);
        method_invoke(instance, clazz_method);
        method_invoke(instance, instance_method);
    }

    Result:

    1. method should be fetched from class

        class_getClassMethod(instance, @selector(instancePrint)) or 

        class_getInstanceMethod(instace, @selector(classPrint))  Return nil

    2. 2rd parameter with nil would lead to crash

        method_invoke(clazz, nil);

        method_invoke(instance, nil);

    3. 1rd parameter with instance or class  would produce same output

        method_invoke(clazz, clazz_method);

        method_invoke(clazz, instance_method);

        method_invoke(instance, clazz_method);

        method_invoke(instance, instance_method);

    Deepening:

    1.How do methods stored in logic and in physic 

     

  • 相关阅读:
    浅析Vue Router中关于路由守卫的应用以及在全局导航守卫中检查元字段
    react-native 项目配置ts运行环境
    #mobx应用在rn项目中
    react-native TextInput输入框输入时关键字高亮
    react-native-亲测可用插件
    nodejs+express实现图片上传
    cordova图片上传,视频上传(上传多个图片,多个视频)
    cordova图片上传,视频上传(上传单个图片,单个视频)
    移动端如何测试(前端,cordova)
    在mac上将apk包安装到android手机上
  • 原文地址:https://www.cnblogs.com/hushuai-ios/p/5087465.html
Copyright © 2011-2022 走看看