在访问对象的时候,self.和self->是一样的都是访问对象本身。当对这个对象声明属性,进行懒加载的时候self.属性,等于调用懒加载方法,而self->属性,就是调用这个属性的对象本身相当于_的作用
self. 是通过属性(property)访问对象成员的语法。属性是 Objective - C 提供的一种封装实例变量(ivar)的机制,它会自动生成对应的 getter 和 setter 方法。使用 self. 实际上是调用了属性的 getter 或 setter 方法。
self-> 是直接访问对象实例变量(ivar)的语法。实例变量是类中定义的变量,用于存储对象的状态。使用 self-> 可以绕过属性的 getter 和 setter 方法,直接访问实例变量。
访问方式:self. 是通过属性的 getter 和 setter 方法访问对象成员,而 self-> 是直接访问实例变量。
封装性:self. 提供了更好的封装性,隐藏了实例变量的具体实现;self-> 则直接暴露了实例变量,封装性较差。
内存管理:使用 self. 时,系统会根据属性的修饰符自动处理内存管理;使用 self-> 时,需要手动管理内存。
使用建议
一般情况下,建议优先使用 self. 来访问对象成员,因为它提供了更好的封装性和自动内存管理。
只有在对性能有严格要求或者有特殊需求时,才考虑使用 self-> 直接访问实例变量。