-
readwrite:是可读可写,会生成getter和setter方法(缺省值)
-
readonly:是只能读取,只会生成getter方法,不会生成setter方法,在值不想被外界修改时使用
-
assign:简单直接赋值,不更改索引计数,对基础数据类型和C数据类型 适用简单数据类型
-
copy:属性必须是objc对象,并遵守了NCoding协议;在赋值时使用传入一份拷贝,拷贝工作由copy方法执行,将指向新的内存地址,常常用于(NSArray,NSDictionary,NSString),释放旧对象
- (void)setName:(NSString *)name {
id n = [name copy];
[name release];
_name = n;
}
-
retain:属性必须是objc对象,此时输入会增加对象的引用计数加1
-
strong:表示只要该属性一直指向某个对象,这个对象就不会被销毁(缺省值)
-
weak:表示只是指向对象,不隐式发送retain, 指向对象一旦被销毁就会自动nil化
-
atomic:原子性,在多线程的环境下是有必要的,会在setter里加锁,保证线程安全, 效率降低(缺省值)
-
nonatomic:非原子性,与atomic是相反的
-
unsafe_unretained:功能几乎等同于weak, 但是对象被销毁不会自动nil化, 成了野指针
-
nonnull:表示不可以为nil,NULL, 不遵守规定编译器会警告
@property (nonatomic, strong, nonnull) NSString *name;
- (void)setName:(_Nonnull NSString *)name;
- (void)setName:(nonnull NSString *)name;
-
nullable:告诉编译器表示值可以空(缺省值)
@property (nonatomic, strong, nullable) NSString *name;
- (void)setName:(_Nullable NSString *)name;
- (void)setName:(nullable NSString *)name;
-
null_resettable:表示如果不指定属性的值,系统就会给个默认值,保证此属性不为nil,在不赋值直接调用self.view 时 view属性会在get方法自动初始化
-
null_unspecified:不确定是否为空,基本没用
网友评论