美文网首页iOS学习
iOS Property 基础整理

iOS Property 基础整理

作者: osbornZ | 来源:发表于2017-02-22 02:14 被阅读38次

我们每天都撸着Property,它是Objective-C的关键词;
@Property是声明属性的语法,它可以快速方便的为实例变量创建存取器,并允许我们通过点语法使用存取器(实例变量的赋值和取值)。

@property 的本质

@property = ivar + getter + setter;
ivar(实例变量)、存取方法(access method = getter + setter)

有了 @property 的属性声明,不必进行实例变量{}的声明,系统默认生成并在 m 文件中生成对应的 _propertyName ;

@synthesize 和 @property 都是编译器特性,自动生成这两个实例变量的存取器,并且隐藏了存取器;
自动生成存取器的方法,比我们手动声明的更简单更方便,且适用于点语法,不需要进行消息发送语法;系统默认 “_XXX”;

自定义应避免无限循环问题 
- (void)setVar:(id)newVar {
    self.var = newVar;
}
- (void)var {
    return self.var;
}
@Property 关键字
  • 原子性
  • 存取器控制
  • 内存管理

默认的配置属性都是什么: < atomic, readwrite,assign >

对于在swift中 去显式声明一个对象或者方法的参数是 optional 还是 non-optional,而在 Objective-C 中则没有这一区分,这样就会带来问题:在 Swift 与Objective-C 混编时,Swift 编译器会隐式地都当成是 non-optional;因此 WWDC 2015 为oc新增特性: Nullability (nonnull nullable null_resettable);

@dynamic

@dynamic 告诉编译器属性的setter与getter方法由用户自己实现,不自动生成。
需要注意编译可通过,但是运行时动态绑定对应方法,否则会导致Crash;

有些存取是在运行时动态创建的,如在CoreData的NSManagedObject类使用的。
用@dynamic修饰的属性,core data 框架会在程序运行的时候为此类属性生成getter和setter方法。

Nullability

相关文章

网友评论

    本文标题:iOS Property 基础整理

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