MST

星途 面试题库

面试题:Objective-C属性访问器方法命名语法规则 - 复杂场景

在一个Objective-C项目中,有一个自定义类MyClass,它有一个NSArray类型的属性items。现在要求实现一个只读属性sortedItems,其返回值是items数组按升序排序后的结果。请按照属性访问器方法命名语法规则,写出相关属性声明及对应的访问器方法实现,并且要考虑线程安全问题。
45.0万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 属性声明
#import <Foundation/Foundation.h>

@interface MyClass : NSObject

@property (nonatomic, strong, readonly) NSArray *sortedItems;
@property (nonatomic, strong) NSArray *items;

@end
  1. 访问器方法实现
#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:方法来定义比较逻辑。