已知的Xcode错误/陷阱列表

时间:2011-06-15 09:05:58

标签: ios xcode xcode4

有这样的清单吗?

我对iOS开发相对较新,我认为研究一个最着名的编译器错误或陷阱列表会很棒。

编辑: 今天我花了太多时间来理解这样的代码:

in * .h

@interface I : NSObject {
    ..
    NSSMutableArray* var; // typo, should be m_var;
}

@property (nonatomic, readonly) NSMutableArray* var;

in * .m

@implementation I

@synthesize var = m_var; // no warnings or anything

-(id) init
{
    self = [super init];
    if (self != nil)
    {
        // no warning or errors
        m_var = [NSMutableArray new];
    }
    return self;
}

我认为是时候学习一些众所周知的Objective-C特质了。

3 个答案:

答案 0 :(得分:2)

Apple的错误列表是Apple内部的。

我认为Open Radar是最接近公开的与Apple产品相关的错误列表,包括Xcode。它由社区维护 - 鼓励用户向Open Radar发布已提交给Apple的错误报告。

答案 1 :(得分:1)

Apple有own bug tracker,但您只能看到自己的报告(!?)

那么你最好的选择是openradar ......这是有限的。

编辑:关于您假设的Xcode Bug,即使这不是问题。

请记住,@synthesize只是语法糖,它将在编译时生成代码。 我的猜测是你的var属性与你的var成员冲突。

我不会说这是一个错误,更可信的问题可以整合到clang静态分析中。

无论如何,这显然是代码错误,人为错误,工具只是帮助我们,或者我们会直接编写汇编字节码:)

答案 2 :(得分:1)

调试的黄金法则:它不是编译器的错误。有些行为有点奇怪,就像你在这里展示的那样,但它们都是设计的。至于有问题的“bug”,编译器可以为你合成实例变量,而不必声明它们:

@interface Foo {}
@property(assign) float bar;
@end

@implementation Foo
@synthesize bar;

- (void) somewhere { bar = 1; }

@end

这很方便,允许您将私有接口移动到实现文件中。回到您的示例,您现在有两个实例变量varm_var,第二个变量充当var属性的存储。这不是什么值得高兴的东西,但它很有意义。 (是否有警告说你有一个实例变量不能作为同名商标的商店?)

由于这种行为主要是设计的,因此您无法在Radar中找到它并且必须查找常见的Objective-C陷阱列表。 (This是另一个有趣的情况。)