【发布时间】:2011-08-02 02:44:37
【问题描述】:
假设我有一个类似的方法:
- (void)reassignPassedObject:(void *)block;
它被称为
NSLog(@"self 1: %@", self);
[myController reassignPassedObject:^(){return self;}];
NSLog(@"self 2: %@", self);
我想将 'self' 引用重新分配给另一个对象,如下所示:
- (void)reassignPassedObject:(void *)block {
id holder = block();
if ( YES ) {
id newObject = nil; //or NSString or NSArray
//do something such that output second log is "self 2: (newObject...)"
}
}
这可能吗?
这似乎应该是公平的游戏,因为我们只是在谈论重新分配指针。我会担心在特定实现中的释放/保留。这里让我感到困惑的挑战是:
- 它涉及 id 而不是直接指针
- 涉及块传递变量
- 这涉及到必须以某种方式重新分配 block() 内的对象地址,在该地址中我们只能访问本地持有者对象。
想法?
【问题讨论】:
-
你为什么要做这一切???
-
除了我们不知道您要做什么或为什么要这样做这一事实之外,您是否有任何理由不只使用双指针作为方法参数,然后以这种方式更改您的对象指针?
标签: objective-c c pointers