美文网首页
synthesize关键字的作用

synthesize关键字的作用

作者: 一双鱼jn | 来源:发表于2018-07-03 10:47 被阅读3次

通常我们习惯于如下方式定义一个属性,并通过点语法来调用属性的gettersetter方法。有时当重写gettersetter方法时还会使用带下划线的同名实例变量_str。那么,gettersetter以及这个实例变量是哪里来的。

@property (nonatomic, strong) NSString *str

iOS6之后 llvm编译器引入property autosysthesis 属性自动合成。

也就是说property定义的属性会自动添加这样一行代码 @synthesize propertyName = _propertyName

这也就是为什么property属性可以用带下划线的属性

@synthesize propertyName = _propertyName
这行代码的作用是

  1. propertyName这个属性生成gettersetter方法。
  2. 同时生成一个带下划线前缀的实例变量。或者说给propertyName添加一个别名

什么时候会用到synthesize

当下面这些情况的时候,系统不会自动的进行属性合成。也就是不会自动的生成gettersetter方法也不会自动的生成带_的实例变量。而我们需要使用实例变量和相关方法的时候,就需要手动添加synthesize来合成实例变量。

  1. 同时重写getter和setter方法时,不会自动合成属性。当我们只重写其中一个的时候还是会进行属性自动合成的
  2. 重写了只读属性的getter方法时。即表示当重写了readonly属性的getter方法时,带_的实例变量需要我们手动通过synthesize来合成。
  3. 使用了@dynamic
  4. 协议中的属性
  5. category中的属性
  6. 重载的属性

下面来分别说明

协议中的属性

协议中定义了属性,协议中定义了属性其实也就是定义了该属性的getter和setter方法,但是并没有该方法的实现。

所以在遵守该协议的类中应该实现对应的getter和setter方法。可以直接通过synthesize关键字来自动生成。

@dynamic

property会自动的添加synthesize,而synthesize的作用是自动生成getter和setter,并且定义一个带下划线的实例变量

dynamic关键字则会阻止自动生成getter和setter方法和生成变量

@interface model
@property (nonatomic, strong) NSString *str;
@end

@implementation
@dynamic str;
@end

相关文章

  • [iOS] Property属性相关的一些问题

    目录 问题: @property中有哪些属性关键字? 问题:@synthesize和@dynamic分别有什么作用...

  • synthesize关键字的作用

    通常我们习惯于如下方式定义一个属性,并通过点语法来调用属性的getter和setter方法。有时当重写getter...

  • 属性标识符

    1、@property、@synthesize、@dynamic @synthesize:作用于在@impleme...

  • Object-c : @dynamic 与@synthesize

    1、 @dynamic与@synthesize作用 @dynamic 与@synthesize 是用于对@prop...

  • @synthesize作用

    属性合成器( auto synthesis),这个过程由编译器在编译期执行,它会生成get/set方法和带下划线的...

  • @synthesize 的作用

    iOS 6 之后 LLVM 编译器引入property autosynthesis,即属性自动合成。换句话说,就是...

  • @synthesize的作用

    1.@synthesize 的作用:是为属性添加一个实例变量名,或者说别名。同时会为该属性生成 setter/ge...

  • @synthesize 的作用

    原文链接:Why use @synthesize statements 译文 iOS 6 之后 LLVM 编译器引...

  • @synthesize 的作用

    使用@synthesize 只有一个目的——给实例变量起个别名,或者说为同一个变量添加两个名字。 使用场景1: 为...

  • @synthesize & @dynamic

    synthesize 现在的编译器会为每个@property属性添加@synthesize,如下: 作用为:创造一...

网友评论

      本文标题:synthesize关键字的作用

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