我想在Swift中存储一组弱引用.数组本身不应该是弱引用 - 它的元素应该是.我认为Cocoa NSPointerArray
提供了非类型安全版本.
有NSPointerArray
一些NSObject
已被释放的弱者.在打电话给compact
我看之前是:
(lldb) po [currentArray count]
1
(lldb) po [currentArray pointerAtIndex:0]
<nil>
(lldb) po [currentArray allObjects]
<__NSArrayM 0x16f04f00>(
)
Run Code Online (Sandbox Code Playgroud)
这是有道理的,但真正奇怪的是,当我调用compact
该数组时,我看到了相同的值!计数仍然返回1并且pointerAtIndex:0
是nil
.
为什么没有删除nil?
编辑
这是完整的代码(是的,它是XCTesting框架):
- (void)testCompaction {
__weak id testingPointer = nil;
NSPointerArray *weakArray = [NSPointerArray weakObjectsPointerArray];
@autoreleasepool {
NSObject *someObj = [[NSObject alloc] init];
testingPointer = someObj;
[weakArray addPointer:(__bridge void*)testingPointer];
NSLog(@"before compaction inside autorelease: testingPointer = %@ count = %d, allObjects = %@, pointerAtIndex:0 = %@, pointerAtIndex:0 class = …
Run Code Online (Sandbox Code Playgroud) 我想在一个弱的引用存储,NSPointerArray
但我得到一个错误:
public var objectWithReloadFRC = NSPointerArray(options: NSPointerFunctionsWeakMemory)
objectWithReloadFRC.addPointer(self) //self is an UIViewController subclass
Run Code Online (Sandbox Code Playgroud)
也试过这个:
objectWithReloadFRC.addPointer(UnsafePointer(self)
Run Code Online (Sandbox Code Playgroud)