美文网首页
iOS - Tips - 黑魔法

iOS - Tips - 黑魔法

作者: reboot_q | 来源:发表于2018-03-26 23:27 被阅读9次

    1. objc_subclassing_restricted

    在@ interface 前, 用__attribute__((objc_subclassing_restricted))修饰的类, 不允许继承.

    2. objc_requires_super

    - (void)method __attribute__((objc_requires_super));修饰的方法, 标识着在子类继承这个方法时, 需要调用 super

    3. objc_boxable

    @(...) 语法糖可以将基本数据类型 box 成 NSNumber 对象,假如想 box 一个 struct 类型或是 union 类型成 NSValue 对象,可以使用这个属性:

    typedefstruct__attribute__((objc_boxable)) {

    CGFloatx, y, width, height;

    } XXRect;

    CGRect rect1 = {1, 2, 3, 4};

    NSValue *value1 = @(rect1);// <--- Compile Error

    XXRect rect2 = {1, 2, 3, 4};

    NSValue *value2 = @(rect2); // √

    4. constructor / destructor

    构造器和析构器,加上这两个属性的函数会在分别在可执行文件(或 shared library)load和 unload 时被调用,可以理解为在 main() 函数调用前和 return 后执行:

    PS:若有多个 constructor 且想控制优先级的话,可以写成 __attribute__((constructor(101))),里面的数字越小优先级越高,1 ~ 100 为系统保留。

    __attribute__((constructor)) static void beforeMain(void) { NSLog(@"beforeMain"); } __attribute__((destructor)) static void afterMain(void) { NSLog(@"afterMain"); }

    int main(int argc, const char * argv[]) {

    NSLog(@"main");

    return 0;

    } // Console: // "beforeMain" -> "main" -> "afterMain"


    相关文章

      网友评论

          本文标题:iOS - Tips - 黑魔法

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