iOS property关键字详解

2021-01-05  本文已影响0人  苏苏慢跑

property的作用是什么,有哪些关键词,分别是什么含义?

property关键字介绍

1.1 原子性:atomic 与 nonatomic

原子性:并发编程中确保其操作具备整体性,系统其它部分无法观察到中间步骤,只能看到操作前后的结果。


//同步锁
- (NSString *)someString {
    @synchronized(self) {
        return _someString;
    }
}
- (void)setSomeString:(NSString *)someString {
    @synchronized(self) {
        _someString = someString;
    }
}
//并发队列
_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- (NSString *)someString {
    __block NSString *localSomeString;
    dispatch_sync(_queue, ^{
        localSomeString = _someString;
    });
    return localSomeString;
}
- (void)setSomeString:(NSString *)someString {
    dispatch_barrier_async(_queue, ^{
        _someString = someString;
    });
}

1.2 读写权限: readwrite与readonly

读写权限不写时默认为 readwrite 。一般可在 .h 里写成readonly,只对外提供读取,在 .m 的Extension中再设置为 readwrite 可进行写入。


//.h文件
#import @interface MyClass : NSObject

@property (nonatomic, readonly, copy) NSString *name;

@end


//.m文件
#import "MyClass.h"

@interface MyClass()

@property (nonatomic, readwrite, copy) NSString *name;

@end

1.3 内存管理语义: assign、strong、copy、weak、unsafe_unretained
1.3.1 关键字
  • assign:主要用于修饰基本数据类型,如NSIteger、CGFloat等,这些数值主要存在于栈中。
1.3.2 比较 copy 与 strong
  • 浅拷贝:指针的拷贝,不会产生新的对象,源对象的引用计数加1

拷贝一个不可变的对象结果是新对象和源对象指向同一个内存地址,即指针的拷贝,属于浅拷贝

拷贝一个可变的对象,会生成一个新对象,不影响源对象的引用计数

1.3.3 比较 assign、weak、unsafe_unretain
  • 相同点:都不是强引用。
上一篇 下一篇

猜你喜欢

热点阅读