我有一个iOS应用程序,它将与几个第三方预建的静态库链接.那些静态库已经剥离了调试信息,并且显然也丢失了它们的架构信息.在构建应用程序(在这种情况下是模拟器)时,我会收到很多这样的警告:
/Developer/usr/bin/dsymutil
warning: (i386) 'libtest.a(test.o)' doesn't contain architecture information for i386.
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉dsymutil关闭这个?该应用程序编译并运行得很好,但所有这些警告都非常难看,我想摆脱它们.有什么建议 ?
- (void) addABlock
{
void (^aBlock)(void) = ^() { [someObject doSomething]; };
[self.myMutableArray addObject: aBlock]; // Oops..
[self.myMutableArray addObject: [aBlock copy]]; // works fine
}
Run Code Online (Sandbox Code Playgroud)
在上面的简化示例中,如果未执行块复制,我会看到未定义的行为.此案例在Apple的ARC过渡指南中有具体列出.
我不明白的部分是为什么我必须手动调用副本.该块在堆栈上创建,因此需要执行block_copy - 这一点很清楚.NSArray不会调用copy,但应该在添加的对象上调用retain.那么为什么不[NSBlock保留]只是调用[NSBlock copy]?
http://www.galloway.me.uk/2013/05/a-look-inside-blocks-episode-3-block-copy/