有这样的清单吗?
我对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特质了。
答案 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
这很方便,允许您将私有接口移动到实现文件中。回到您的示例,您现在有两个实例变量var
和m_var
,第二个变量充当var
属性的存储。这不是什么值得高兴的东西,但它很有意义。 (是否有警告说你有一个实例变量不能作为同名商标的商店?)
由于这种行为主要是设计的,因此您无法在Radar中找到它并且必须查找常见的Objective-C陷阱列表。 (This是另一个有趣的情况。)