Ste*_*her 19 weak-references nsdictionary ios automatic-ref-counting
我想在一个对象中存储一个归零的弱引用NSDictionary
.这是为了引用父项NSDictionary
,因此我可以在不进行搜索的情况下爬回大型结构.
我不能__weak
在这里使用; 即使我的本地引用很弱,它NSDictionary
也会存储对弱引用对象的强引用.而且,当然,NSDictionary
不能有nil
对象.
我在iOS上,而不是Mac,因此NSHashTable
无法使用.我只希望一个物体变弱; 其余的应该仍然很强大.
(我将发布我的答案,所以如果没有更好的答案,我有一些标记为可接受.但我希望有人有更好的答案.)
Joã*_*nes 37
在iOS 6+中,您可以使用NSMapTable并选择是否希望对象和/或键变弱或变强.
Ste*_*her 15
我已经决定用一个成员定义一个"容器"类,如下所示:
@interface Parent : NSObject
@property (nonatomic, weak) id parent;
@end
@implementation Parent
@synthesize parent = _parent;
- (id)initWithParent: (id)parent;
{
if (( self = [super init] )) {
_parent = parent;
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
并使用它:
id parentRef = [[Parent alloc] initWithParent: parent];
[newElement setObject: parentRef forKey: ParentKey];
Run Code Online (Sandbox Code Playgroud)
我认为这对我有用,但似乎很疯狂,基金会没有更好的方法.
有内置的方式; 只需使用:
[array addObject:[NSValue valueWithNonretainedObject:object]];
Run Code Online (Sandbox Code Playgroud)
然后,要稍后访问该对象,请使用:
id object = [[array objectAtIndex:i] nonretainedObjectValue];
Run Code Online (Sandbox Code Playgroud)
如果该值已经添加,那么"对象"将是iOS 4.x下的无效指针,并且(我假设)在启用ARC的情况下将在5.x以下为零.
编辑:我的假设是错误的 - 它在ARC下并不弱(见下面的讨论).
归档时间: |
|
查看次数: |
10103 次 |
最近记录: |