其他分享
首页 > 其他分享> > 新类和Block

新类和Block

作者:互联网

#ifndef _REWRITER_typedef_TestA
#define _REWRITER_typedef_TestA
typedef struct objc_object TestA;
typedef struct {} _objc_exc_TestA;
#endif

struct TestA_IMPL {
    struct NSObject_IMPL NSObject_IVARS;
};


/* @end */


// @implementation TestA


struct __TestA__funcitonBlock_block_impl_0 {
  struct __block_impl impl;
  struct __TestA__funcitonBlock_block_desc_0* Desc;
  __TestA__funcitonBlock_block_impl_0(void *fp, struct __TestA__funcitonBlock_block_desc_0 *desc, int flags=0) {
    impl.isa = &_NSConcreteStackBlock;
    impl.Flags = flags;
    impl.FuncPtr = fp;
    Desc = desc;
  }
};
static int __TestA__funcitonBlock_block_func_0(struct __TestA__funcitonBlock_block_impl_0 *__cself, int index) {

        int addIndex = index + 1;
        printf("====> %d\n",addIndex);
        return addIndex;
    }

static struct __TestA__funcitonBlock_block_desc_0 {
  size_t reserved;
  size_t Block_size;
} __TestA__funcitonBlock_block_desc_0_DATA = { 0, sizeof(struct __TestA__funcitonBlock_block_impl_0)};

static void _I_TestA_funcitonBlock(TestA * self, SEL _cmd) {
    int i = 10;
    int (*testBlk)(int) = ((int (*)(int))&__TestA__funcitonBlock_block_impl_0((void *)__TestA__funcitonBlock_block_func_0, &__TestA__funcitonBlock_block_desc_0_DATA));
    printf("---> %d\n",((int (*)(__block_impl *, int))((__block_impl *)testBlk)->FuncPtr)((__block_impl *)testBlk, i));
}

// @end

int main () {
    ((void (*)(id, SEL))(void *)objc_msgSend)((id)((TestA *(*)(id, SEL))(void *)objc_msgSend)((id)((TestA *(*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("TestA"), sel_registerName("alloc")), sel_registerName("init")), sel_registerName("funcitonBlock"));
    return 0;
}

struct _prop_t {
    const char *name;
    const char *attributes;
};

struct _protocol_t;

struct _objc_method {
    struct objc_selector * _cmd;
    const char *method_type;
    void  *_imp;
};

struct _protocol_t {
    void * isa;  // NULL
    const char *protocol_name;
    const struct _protocol_list_t * protocol_list; // super protocols
    const struct method_list_t *instance_methods;
    const struct method_list_t *class_methods;
    const struct method_list_t *optionalInstanceMethods;
    const struct method_list_t *optionalClassMethods;
    const struct _prop_list_t * properties;
    const unsigned int size;  // sizeof(struct _protocol_t)
    const unsigned int flags;  // = 0
    const char ** extendedMethodTypes;
};

struct _ivar_t {
    unsigned long int *offset;  // pointer to ivar offset location
    const char *name;
    const char *type;
    unsigned int alignment;
    unsigned int  size;
};

struct _class_ro_t {
    unsigned int flags;
    unsigned int instanceStart;
    unsigned int instanceSize;
    unsigned int reserved;
    const unsigned char *ivarLayout;
    const char *name;
    const struct _method_list_t *baseMethods;
    const struct _objc_protocol_list *baseProtocols;
    const struct _ivar_list_t *ivars;
    const unsigned char *weakIvarLayout;
    const struct _prop_list_t *properties;
};

struct _class_t {
    struct _class_t *isa;
    struct _class_t *superclass;
    void *cache;
    void *vtable;
    struct _class_ro_t *ro;
};

struct _category_t {
    const char *name;
    struct _class_t *cls;
    const struct _method_list_t *instance_methods;
    const struct _method_list_t *class_methods;
    const struct _protocol_list_t *protocols;
    const struct _prop_list_t *properties;
};
extern "C" __declspec(dllimport) struct objc_cache _objc_empty_cache;
#pragma warning(disable:4273)

static struct /*_method_list_t*/ {
    unsigned int entsize;  // sizeof(struct _objc_method)
    unsigned int method_count;
    struct _objc_method method_list[1];
} _OBJC_$_INSTANCE_METHODS_TestA __attribute__ ((used, section ("__DATA,__objc_const"))) = {
    sizeof(_objc_method),
    1,
    {{(struct objc_selector *)"funcitonBlock", "v16@0:8", (void *)_I_TestA_funcitonBlock}}
};

static struct _class_ro_t _OBJC_METACLASS_RO_$_TestA __attribute__ ((used, section ("__DATA,__objc_const"))) = {
    1, sizeof(struct _class_t), sizeof(struct _class_t), 
    (unsigned int)0, 
    0, 
    "TestA",
    0, 
    0, 
    0, 
    0, 
    0, 
};

static struct _class_ro_t _OBJC_CLASS_RO_$_TestA __attribute__ ((used, section ("__DATA,__objc_const"))) = {
    0, sizeof(struct TestA_IMPL), sizeof(struct TestA_IMPL), 
    (unsigned int)0, 
    0, 
    "TestA",
    (const struct _method_list_t *)&_OBJC_$_INSTANCE_METHODS_TestA,
    0, 
    0, 
    0, 
    0, 
};

extern "C" __declspec(dllimport) struct _class_t OBJC_METACLASS_$_NSObject;

extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_TestA __attribute__ ((used, section ("__DATA,__objc_data"))) = {
    0, // &OBJC_METACLASS_$_NSObject,
    0, // &OBJC_METACLASS_$_NSObject,
    0, // (void *)&_objc_empty_cache,
    0, // unused, was (void *)&_objc_empty_vtable,
    &_OBJC_METACLASS_RO_$_TestA,
};

extern "C" __declspec(dllimport) struct _class_t OBJC_CLASS_$_NSObject;

extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_TestA __attribute__ ((used, section ("__DATA,__objc_data"))) = {
    0, // &OBJC_METACLASS_$_TestA,
    0, // &OBJC_CLASS_$_NSObject,
    0, // (void *)&_objc_empty_cache,
    0, // unused, was (void *)&_objc_empty_vtable,
    &_OBJC_CLASS_RO_$_TestA,
};
static void OBJC_CLASS_SETUP_$_TestA(void ) {
    OBJC_METACLASS_$_TestA.isa = &OBJC_METACLASS_$_NSObject;
    OBJC_METACLASS_$_TestA.superclass = &OBJC_METACLASS_$_NSObject;
    OBJC_METACLASS_$_TestA.cache = &_objc_empty_cache;
    OBJC_CLASS_$_TestA.isa = &OBJC_METACLASS_$_TestA;
    OBJC_CLASS_$_TestA.superclass = &OBJC_CLASS_$_NSObject;
    OBJC_CLASS_$_TestA.cache = &_objc_empty_cache;
}
#pragma section(".objc_inithooks$B", long, read, write)
__declspec(allocate(".objc_inithooks$B")) static void *OBJC_CLASS_SETUP[] = {
    (void *)&OBJC_CLASS_SETUP_$_TestA,
};
static struct _class_t *L_OBJC_LABEL_CLASS_$ [1] __attribute__((used, section ("__DATA, __objc_classlist,regular,no_dead_strip")))= {
    &OBJC_CLASS_$_TestA,
};
#import <Foundation/Foundation.h>

@interface TestA : NSObject

@end

@implementation TestA

-(void)funcitonBlock {
    int i = 10;
    int (^testBlk)(int) = ^int(int index){
        int addIndex = index + 1;
        printf("====> %d\n",addIndex);
        return addIndex;
    };
    printf("---> %d\n",testBlk(i));
}

@end

int main () {
    [[[TestA alloc] init] funcitonBlock];
    return 0;
}

 

标签:__,const,struct,int,新类,TestA,objc,Block
来源: https://www.cnblogs.com/yuxiaoyiyou/p/11282431.html