面试题答案
一键面试- 属性声明:
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
@property (nonatomic, strong, readonly) NSArray *sortedItems;
@property (nonatomic, strong) NSArray *items;
@end
- 访问器方法实现:
#import "MyClass.h"
@interface MyClass ()
@property (nonatomic, strong) dispatch_queue_t queue;
@end
@implementation MyClass
- (instancetype)init {
self = [super init];
if (self) {
_queue = dispatch_queue_create("com.example.MyClassQueue", DISPATCH_QUEUE_SERIAL);
}
return self;
}
- (NSArray *)sortedItems {
__block NSArray *sortedArray;
dispatch_sync(self.queue, ^{
sortedArray = [self.items sortedArrayUsingSelector:@selector(compare:)];
});
return sortedArray;
}
@end
解释:
- 声明了一个只读属性
sortedItems
和一个可读写属性items
。 - 为了保证线程安全,在类的扩展中创建了一个串行队列
queue
,在init
方法中初始化该队列。 - 在
sortedItems
的访问器方法中,使用dispatch_sync
函数在队列中对items
数组进行排序,以确保在多线程环境下的安全访问。排序使用compare:
方法进行升序排序,假设items
数组中的对象都实现了compare:
方法。如果数组中的对象是自定义类型,需要在自定义类中实现compare:
方法来定义比较逻辑。