美文网首页
OC与C结构体

OC与C结构体

作者: George2016 | 来源:发表于2017-09-14 11:15 被阅读15次

结构体一般都只有数据成员,而没有函数成员。也就是像int、double这样的数据类型,函数需要单独定义。

所以想要C结构体中绑定一个函数就需要用到指针函数。

UserInfo.h

typedef struct _user {
    int year;
    int month;
    char *name;
    int(*add)(int a, int b);
    UILabel*(*label)(char *title);
}User;

static int fun_add(int a, int b) {
    return a+b;
}

static UILabel *label(char *title) {
    
    UILabel *label = [UILabel new];
    
    label.text = [NSString stringWithCString:title encoding:NSUTF8StringEncoding];
    
    label.backgroundColor = [UIColor greenColor];
    
    return label;
}

@interface UserInfo : NSObject

+(User)sharedInstance;

@end

UserInfo.m

@implementation UserInfo
+(User)sharedInstance {
    struct _user obj = {
        2,
        5,
        "张三",
        .add = fun_add,
        .label = label,
    };
    return obj;
}
@end

在控制器中的使用

User demo = [UserInfo sharedInstance];
int res = demo.add(1, 3);
NSLog(@"res=%d", res);
NSLog(@"year=%d", demo.year);
NSLog(@"name=%s", demo.name);

UILabel *label = demo.label("中国欢迎你");
label.frame = CGRectMake(300, 100, 300, 200);
[self.view addSubview:label];

相关文章

  • 01-OC对象的本质

    OC是通过C/C++的什么数据结构实现我们的OC对象呢 结构体--OC对象的本质就是C/C++的结构体 Class...

  • 【OC梳理】结构体、枚举

    结构体(struct) OC中的结构体(struct),其实就是C语言中的结构体(struct)常见使用方法。OC...

  • OC与C结构体

    结构体一般都只有数据成员,而没有函数成员。也就是像int、double这样的数据类型,函数需要单独定义。 所以想要...

  • iOS OC对象总结

    OC的实现 OC的对象、类主要是基于C、C++的结构体来实现的。编写的 OC代码,底层实现其实都是C、C++代码。...

  • iOS开发: 一个NSObject对象究竟占用多少内存?

    OC对象的是基于C/C++的结构体实现的,一个NSObject占用的内存其实就是一个结构体占用的内存,这个结构体...

  • OC

    1.oc底层其实都是c/c++代码 oc的类主要是基于c/c++的结构体实现的 clang -rewrite-ob...

  • 52个有效方法(14) - 理解“类对象”的用意

    在OC中,类,对象和方法其实都是一个C的结构体。 描述Objective-C对象所用的数据结构定义 每个对象结构体...

  • OC对象的本质

    一、本质 OC对象的本质是C和C++中的结构体 OC代码转C++代码:clang -rewrite-objc ma...

  • oc对象本质

    OC代码底层实现都是c/c++,oc的类和对象都是基于c/c++的结构体实现的 1.nsobject的底层实现就是...

  • Objective-C基础

    OC OC知识点 OC的字符串 - 1.类:是结构体的升级,用于定义变量 - - 与结构体的区别 关键字 成员变量...

网友评论

      本文标题:OC与C结构体

      本文链接:https://www.haomeiwen.com/subject/ilarsxtx.html