Xcode 4.5.1在归档时卡住了

我刚刚将我的xcode升级到4.5.1版。
一切都运行良好,但现在,当我存档项目时, xcode卡住/挂起 ,永远不会完成归档。
在状态顶部,文字说:

编译10个源文件中的10个……

之后什么也没发生。 它只是卡住了。
我仍然可以编译和构建代码(没有归档),一切都在模拟器中运行得很好。

我重新安装了xcode。 之后问题仍然存在。
任何建议都会受到批评。

更多信息:
我已经将问题精确定位到特定的代码行:
CGRect tmpFrame3 = seeDetailsButton.frame;
我觉得这条线没有任何问题……
为什么它在模拟器中构建和运行时工作正常但在归档时失败?

我弄清楚这里发生了什么。
首先,它与归档过程本身无关,而与发布模式中的构建无关。
我在归档期间遇到问题的原因是因为它在发布模式下构建。

关于问题本身:
似乎xcode 4.5.1中存在某种Apple编译器错误
我正在使用Apple LLVM编译器4.1。 在编译期间,它具有不同的优化级别。
在调试中 – 优化设置为“无”并关闭。 在发布中,它被设置为“最快,最小[-Os]”。 当我在发布模式下关闭优化(将其设置为“无”)时 – 问题不会发生。

更多信息:
在深入挖掘我的代码并试图找出在优化过程中会导致编译器错误的内容之后,我看到我有以下内容:

 __weak ProfileButton *tmp = myButton; 

其中ProfileButton只是一个常规按钮,inheritance自UIButton。
当我删除__weak一切正常。 即使我将编译器优化设置为“最快,最小[-Os]”。

最近遇到了同样的问题,在编译期间Xcode挂在最终文件上。 以与上述问题相同的方式,将发布的优化级别设置为None([-O0]以匹配调试模式)将允许存档成功运行。

但是,对于我们的代码,特定的错误与捕获自身的块相关联。 根据Apple的指导方针 :

“如果你需要在块中捕获self,例如在定义回调块时,考虑内存管理含义是很重要的。

Blocks保持对任何捕获对象(包括self)的强引用,这意味着它很容易以强大的参考周期结束……“

因此,请务必检查您的代码(如果适用),并遵循Apple的最佳做法来捕获对自我的弱引用( 例如文档中的示例 )。

在我的例子中,我创建了一个圆形子类

它就像

 @interface BaseTableViewController : PaymentTableViewController 

 @interface PaymentTabelViewController : BaseTableViewController 

我做的是重新编写最后一个子类,所以它现在看起来像这样:

 @interface TopTableViewController : PaymentTableViewController 

 @interface PaymentTableViewController : BaseTableViewController 

在我的情况下,当一个源文件包含如下非常大的数组的声明时出现问题:

 NSArray *> *points = @[ @[@38.576732f, @-90.230682f, @1495320246], // 1 item ... @[@37.478034f, @-89.524851f, @1495336147] // 3000 item ]; 

大约有3k项目。 将源代码行拆分为小代码并没有帮助。

通过将项目放在CSV文件中并在运行时解析它来修复它。

另一种方法可能是分裂成更小的数组并在运行时连接。