美文网首页
iOS属性property及其他关键字

iOS属性property及其他关键字

作者: 鹏雨燕 | 来源:发表于2019-04-21 23:05 被阅读0次

    类声明属性时@property()..会自动生成属性的get和setter方法,并且新建一个实例var = _var;

    @sythesize是属性的默认情况,即通过@property声明,则会新建一个实例,并检查set和get方法,如果没写,会自动帮你填充。

    @dynamic意思是set和get方法由用户自己实现,编译器不检查,而且也不会新建实例,有什么应用场景?不需要系统帮你实现get,set方法的时候

    在iOS的extention声明一个属性时,由于extention是一个.h头文件,更加不会主动生成成员变量和set,get,事实上没有地方实现成员变量的get和set方法。
    category扩展实现不允许成员变量的生成,扩展是在运行时才会执行,新增成员变量会打乱内存结构导致crash,但是可以通过内存关联实现属性扩展如下面示例:

     // MyView+MyCategory.h
        #import "MyView.h"
    
        @interface MyView (MyCategory)
    
        // 在 Category 中定义属性:
        @property (assign, nonatomic) int32_t viewIndex;
    
        @end
    
        // MyView+MyCategory.m
        #import "MyView+MyCategory.h"
        #import <objc/runtime.h>
    
        // 标记属性的 Key:
        static const void *ViewIndexKey = &ViewIndexKey;
    
        @implementation MyView (MyCategory)
    
        @dynamic viewIndex;
    
        - (void)setViewIndex:(int32_t)viewIndex {
            objc_setAssociatedObject(self, ViewIndexKey, @(viewIndex), OBJC_ASSOCIATION_ASSIGN);
        }
    
        - (int32_t)viewIndex {
            return [objc_getAssociatedObject(self, ViewIndexKey) intValue];
        }
    
        @end
    

    protocol实现成员变量的增加需要加@sythesize生成一个成员变量才能用。
    顺便提一句,代理delegate,是遵循了协议的类。

    相关文章

      网友评论

          本文标题:iOS属性property及其他关键字

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