原子是objc使用的线程保护技术。从根本上说,它是为了防止另一个线程在写入未完成时读取数据,从而导致数据错误。而且这种机制会消耗系统资源,因此如果您不在像iphone这样的小设备上使用多线程通信编程,非原子是一个非常好的选择。指出访问器不是原子操作,默认情况下,访问器是原子操作。也就是说,在多线程环境中,解析的访问器提供对属性的安全访问。从访问器获得的返回值或由setter设置的返回值可以一次完成,即使其他线程正在访问它。如果不指定非原子,则解析的访问器将保留并自动释放内存管理环境中的返回值。如果指定了nonatomic,那么访问器只返回这个值。
当前类与包子类相同。当其他包的成员不编写访问修饰符时,默认值为default。默认情况下,对于同一包中的其他类,它相当于public,对于不在同一包中的其他类,它相当于private。protected对于同一包中的子类相当于public,对于非父-子类相当于private。在java中,外部类修饰符只能是public或default,类成员(包括内部类)可以有上述四个修饰符。
由于它是私人财产,因此不建议直接访问它。通常,提供了访问私有属性的方法。这样,可以在方法中控制对属性的访问。
当然,也可以通过反射直接访问。
我们准备一个包含私有属性的类
然后通过反射访问属性。记住添加afield.setaccessible可访问(true)此代码,否则无法访问私有属性。
不afield.setaccessible可访问(正确)
添加afield.setaccessible可访问(正确)