返回
逐层解密iOS Runtime之属性与成员变量修饰符剖析
IOS
2023-10-20 00:37:58
揭秘属性与成员变量修饰符
在iOS Runtime中,属性和成员变量是两种不同的概念。属性是面向对象的编程语言中用来访问成员变量的特殊方法,而成员变量则是类中定义的变量。属性的本质是编译器自动帮我们生成:Ivar + setter + getter。
属性和成员变量都可以使用修饰符来控制其访问权限。修饰符可以是public
、private
、protected
、internal
或fileprivate
。
public
修饰符表示属性或成员变量可以在任何地方被访问。private
修饰符表示属性或成员变量只能在本类中被访问。protected
修饰符表示属性或成员变量只能在本类及其子类中被访问。internal
修饰符表示属性或成员变量只能在本模块中被访问。fileprivate
修饰符表示属性或成员变量只能在本源文件中被访问。
代码剖析:修饰符在实践中的应用
为了更深入地理解属性和成员变量修饰符的用法,我们以一个实际的代码示例来说明。
首先,我们定义一个LGPerson
类,添加一系列如下不同修饰符的属性:
class LGPerson {
public var name: String
private var age: Int
protected var gender: String
internal var address: String
fileprivate var phone: String
}
然后,我们在main.m
文件中创建一个LGPerson
类的实例,并访问其属性:
#import "LGPerson.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
// 创建 LGPerson 类的实例
LGPerson *person = [[LGPerson alloc] init];
// 访问 public 修饰符的属性
person.name = @"李四";
// 访问 private 修饰符的属性
// person.age = 20; // 报错,无法访问 private 修饰符的属性
// 访问 protected 修饰符的属性
// person.gender = @"男"; // 报错,无法访问 protected 修饰符的属性
// 访问 internal 修饰符的属性
person.address = @"北京市海淀区";
// 访问 fileprivate 修饰符的属性
// person.phone = @"18812345678"; // 报错,无法访问 fileprivate 修饰符的属性
}
return 0;
}
从代码中可以看出,只有public
和internal
修饰符的属性可以在main.m
文件中被访问。
结语
属性和成员变量修饰符是iOS Runtime中的重要概念,理解这些修饰符的用法和作用对于编写出安全、可靠的代码非常重要。希望这篇文章能够帮助你更好地理解iOS Runtime中的属性和成员变量修饰符。