归档时的Xcode 4.5.1卡住(Xcode 4.5.1 get stuck when archi

2019-08-01 14:05发布

我刚刚升级我的Xcode 4.5.1版本。
一切都工作得很好以前,但现在,当我归档项目时,Xcode卡住/挂永不完成归档。
在顶部的状态,文中说:

编译的10个源文件10 ...

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

我重新安装的Xcode。 这个问题后仍然发生。
任何建议将appriciated。

更多信息:
我已经精确定位的问题,以特定的代码行:
CGRect tmpFrame3 = seeDetailsButton.frame;
我看不出有什么问题,这条线...
建立并在模拟器中运行时归档时为什么会工作得很好,但未能???

Answer 1:

我想通了,这到底是怎么回事。
首先,它是不相关的归档过程本身,而是在释放模式构建。
我归档期间出现了问题的原因是因为那建立在释放模式。

关于这个问题本身:
它似乎有在Xcode 4.5.1某种苹果的编译器的bug。
我使用的是苹果LLVM编译器4.1。 在编译过程中有不同的优化级别。
在调试 - 优化设置为“无”和关闭。 在释放它被设置为“最快,最小[-Os]”。 当我在释放模式关掉优化(将其设置为“无”) - 这个问题不会发生。

更多信息:
在挖我的代码,并试图找出优化过程中什么会导致编译器错误后,我看到了,我有以下几点:

__weak ProfileButton *tmp = myButton;

其中ProfileButton只是一个普通的按钮从UIButton的继承。
当我删除了__weak一切工作就好了。 甚至当我设置了编译器优化为“最快,最小[-Os]”。



Answer 2:

最近面临同样的问题,在Xcode编译期间挂在最终文件。 以同样的方式为上述问题,释放设置优化级别为无([-O0]匹配调试模式),将允许存档成功运行。

但是,我们的代码的特定错误被捆绑到被捕获的自我块。 每苹果的指导方针 :

“如果你需要捕获的自我在块,这种决定性的回调块时一样,它要考虑内存管理的影响是很重要的。

块保持到任何捕获的对象的强引用,包括自我,这意味着它很容易具有较强的参考周期结束了......”

所以一定要检查你的代码这一点,如果适用,并遵循苹果的最佳实践来捕获(弱引用自我在文档和示例 )。



Answer 3:

在我来说,我创建了一个circlic子

它就像

@interface BaseTableViewController : PaymentTableViewController 

@interface PaymentTabelViewController : BaseTableViewController

我所做的就是给reneme最后一个子类,所以它现在看起来是这样的:

@interface TopTableViewController : PaymentTableViewController 

@interface PaymentTableViewController : BaseTableViewController 


Answer 4:

在我的情况下,问题出现了,当一个源文件包含了非常大阵这样的声明:

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

有3K左右的项目。 拆分源行分成若干小的没有帮助。

通过将项目中的一个CSV文件修复,并解析它在运行时。

另一种方法可以分裂成更小的阵列,并在运行时级联。



文章来源: Xcode 4.5.1 get stuck when archiving