ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

新类和Block

2019-08-01 14:54:10  阅读:253  来源: 互联网

标签:__ const struct int 新类 TestA objc 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有