MST

星途 面试题库

面试题:Objective-C中NSOperationQueue的优先级与依赖关系

在Objective-C的NSOperationQueue中,如何设置NSOperation的执行优先级?如果有多个NSOperation,其中某些操作依赖于其他操作完成后才能执行,该如何实现?请举例说明。
21.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 设置NSOperation的执行优先级
    • 在Objective - C中,NSOperation有一个queuePriority属性来设置执行优先级。queuePriority是一个枚举类型,有以下几种优先级级别:
      • NSOperationQueuePriorityVeryLow:非常低的优先级。
      • NSOperationQueuePriorityLow:低优先级。
      • NSOperationQueuePriorityNormal:普通优先级(默认)。
      • NSOperationQueuePriorityHigh:高优先级。
      • NSOperationQueuePriorityVeryHigh:非常高的优先级。
    • 示例代码:
NSOperation *operation = [[NSBlockOperation alloc] init];
operation.queuePriority = NSOperationQueuePriorityHigh;
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];
  1. 设置操作之间的依赖关系
    • NSOperation类提供了addDependency:方法来设置依赖关系。一个操作可以依赖于一个或多个其他操作,只有当它所依赖的所有操作都完成后,该操作才会被添加到队列中执行。
    • 示例代码:
// 创建操作1
NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"Operation 1 is executing.");
}];
// 创建操作2
NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"Operation 2 is executing.");
}];
// 创建操作3,操作3依赖于操作1和操作2
NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"Operation 3 is executing.");
}];
[operation3 addDependency:operation1];
[operation3 addDependency:operation2];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 将操作添加到队列
[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:operation3];

在上述示例中,operation3会在operation1operation2都完成后才开始执行。operation1operation2之间没有依赖关系,它们可能会并发执行(取决于队列的设置和系统资源)。