Ios 已知Xcode错误/陷阱列表
有这样的清单吗 我对iOS开发相对较新,我认为研究一系列最著名的编译器bug或缺陷会很好 编辑: 今天,我花了太多时间来理解这样的代码: in*.hIos 已知Xcode错误/陷阱列表,ios,xcode,xcode4,Ios,Xcode,Xcode4,有这样的清单吗 我对iOS开发相对较新,我认为研究一系列最著名的编译器bug或缺陷会很好 编辑: 今天,我花了太多时间来理解这样的代码: in*.h @interface I : NSObject { .. NSSMutableArray* var; // typo, should be m_var; } @property (nonatomic, readonly) NSMutableArray* var; 单位*.m @implementation I @synthes
@interface I : NSObject {
..
NSSMutableArray* var; // typo, should be m_var;
}
@property (nonatomic, readonly) NSMutableArray* var;
单位*.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特性了。苹果的bug列表是苹果内部的
我认为这是最接近苹果产品相关bug的公开列表,包括Xcode。它由社区维护-鼓励用户发布并打开已提交给苹果的bug报告。苹果的bug列表是苹果内部的 我认为这是最接近苹果产品相关bug的公开列表,包括Xcode。它由社区维护-鼓励用户发布并打开已提交给苹果的bug报告。苹果有自己的漏洞报告,但你只能看到自己的报告(!?) 你最好的选择是。。。这是有限的 编辑:关于假设的Xcode Bug,即使这不是问题所在 记住,
@synthesis
只是在编译时生成代码的语法糖。
我猜您的var属性与您的var成员冲突
我不会说这是一个bug,更可能是一个可预测的问题,可以集成到clang静态分析中
无论如何,这显然是一个代码错误,一个人为错误,工具只是为了帮助我们,或者我们可以直接编写汇编字节码:)苹果有自己的,但你只能看到自己的报告(!?)
你最好的选择是。。。这是有限的
编辑:关于假设的Xcode Bug,即使这不是问题所在
记住,@synthesis
只是在编译时生成代码的语法糖。
我猜您的var属性与您的var成员冲突
我不会说这是一个bug,更可能是一个可预测的问题,可以集成到clang静态分析中
无论如何,这显然是一个代码错误,一个人为错误,工具只是为了帮助我们,或者我们可以直接编写汇编字节码:)调试的黄金法则:这不是编译器的错。有些行为有点奇怪,就像你在这里展示的那样,但它们是故意的。至于问题中的“bug”,编译器可以为您合成实例变量,而无需声明它们:
@interface Foo {}
@property(assign) float bar;
@end
@implementation Foo
@synthesize bar;
- (void) somewhere { bar = 1; }
@end
这很方便,并允许您将私有接口移动到实现文件中。回到您的示例,现在有两个实例变量,var
和m_var
,第二个实例变量充当var
属性的存储。这并不是一件值得高兴的事情,但它有着完美的意义。(是否会有一个警告,说明您的实例变量不能作为同名属性的存储?)
由于这种行为大多是设计出来的,你在雷达上找不到它,你必须寻找一个常见的Objective-C陷阱列表。(这是另一个有趣的情况。)调试的黄金法则:这不是编译器的错。有些行为有点奇怪,就像你在这里展示的那样,但它们是故意的。至于问题中的“bug”,编译器可以为您合成实例变量,而无需声明它们:
@interface Foo {}
@property(assign) float bar;
@end
@implementation Foo
@synthesize bar;
- (void) somewhere { bar = 1; }
@end
这很方便,并允许您将私有接口移动到实现文件中。回到您的示例,现在有两个实例变量,var
和m_var
,第二个实例变量充当var
属性的存储。这并不是一件值得高兴的事情,但它有着完美的意义。(是否会有一个警告,说明您的实例变量不能作为同名属性的存储?)
由于这种行为大多是设计出来的,你在雷达上找不到它,你必须寻找一个常见的Objective-C陷阱列表。(这是另一个有趣的情况。)你怎么知道
m_var
总是为零。据我所知,var
应该始终为零,因为您没有将其用于任何用途。@kubi对不起,您是对的。Xcode 4中的调试器窗口告诉我var为nil。您发布的代码中没有bug。您已经告诉编译器合成一个名为m_var
的实例变量,它就是这样做的。@badocumentation states“使用@synthesis指令告诉编译器创建访问器方法”。所以我想我告诉编译器要这样做,不要创建实例变量。顺便说一句,我的问题并不是关于这个特定的问题。文档还说“根据需要合成实例变量”。在您的特定示例中,它是必需的,因为m_var
尚未声明。不过,如果有一个警告就好了。你怎么知道m\u var
总是为零呢。据我所知,var
应该始终为零,因为您没有将其用于任何用途。@kubi对不起,您是对的。Xcode 4中的调试器窗口告诉我var为nil。您发布的代码中没有bug。您已经告诉编译器合成一个名为m_var
的实例变量,它就是这样做的。@badocumentation states“使用@synthesis指令告诉编译器创建访问器方法”。所以我想我告诉编译器要这样做,不要创建实例变量。顺便说一句,我的问题并不是关于这个特定的问题。文档还说“根据需要合成实例变量”。在您的特定示例中,它是必需的,因为m_var
尚未声明。不过,最好有一个警告。var
实例变量是nil
,因为您没有