使用Objective-C中的std::list

Use std::list in Objective-C?

本文关键字:list std 中的 Objective-C 使用      更新时间:2023-10-16

我刚刚发现Objective-C中没有LinkedList实现,但我需要一个。所以我将使用std::list(或者有更好的替代方案?)。

我的问题是:在ARC和非ARC下,我应该关心什么?

您应该手动处理内存管理,因为std::list是一个C++容器。或者,您可以使用NSMutableArray并将其视为链表,为最后一个索引添加带有insertObject:atIndex:的新元素,使用迭代器removeLastObject等对其进行迭代。

您可以使用自定义C++智能指针(在Objective-C++中):

template<class X>
class objc_ptr {
private:
  X* ptr;
public:
  ~objc_ptr() {
    if(ptr!=NULL) [ptr release];
  }
  objc_ptr() {
  }
  objc_ptr(X* x) {
    this.ptr = x;
    if(x!=NULL) [x retain];
  }
  // TODO, copy constructor, operator= ...
};

然后您可以使用:std::list>

或者使用boost intrusive_ptr:

void intrusive_ptr_add_ref(NSObject *x) {
  [x retain];
}
void intrusive_ptr_release(NSObject *x) {
  [x release];
}
std::list<boost::intrusive_ptr<NSFooBar>> list = ...;
相关文章: