OC的成员变量和属性

self. 和 self->的区别?

  1. self. 是调用get方法
  2. Self. 是当前本身,是一个指向当前对象的指针
  3. self->是直接访问成员变量

成员属性和成员变量的区别

@interface Log : NSObject
{
    @protected
    NSString* documentsDirectory; //成员变量
    NSString* fileName;
}
@property (copy) NSString* documentsDirectory; //成员属性
@property (copy) NSString* fileName;

成员属性 @property 在编译时会做以下三个动作

  1. 自动生成get
  2. 自动生成set方法
  3. 生成成员变量_documentsDirectory,即成员变量名前加个底杠

由此可见,成员属性包含了成员变量

所以调用成员变量就是用self->调用,即self->documentsDirectory,

调用成员属性用self.调用,即self.documentsDirectory,如果想用self->调用成员属性就只能self->_documentsDirectory,这样调用太麻烦,一般会再用@synthesize对带底杠的成员属性名重新定名

@synthesize fileName, documentsDirectory

这样就可以直接访问成员属性名self->documentsDirectory

更详细的逻辑请参考这篇文章

解惑——iOS中成员变量和属性区别

推荐阅读更多精彩内容