Iphone Don';我不懂记忆分析
我已经将我的XCode升级到版本3.2.3,以便在我的iphone项目上支持iOS4。使用静态分析器,我检查了内存管理问题 在我的一个例行程序中,我遇到了以下问题: 在将事件添加到日历后,我会生成一个用户警报,以向其提供状态 这运行正常,但内存分析器不喜欢我定义警报的方式。Iphone Don';我不懂记忆分析,iphone,objective-c,xcode,memory-management,clang-static-analyzer,Iphone,Objective C,Xcode,Memory Management,Clang Static Analyzer,我已经将我的XCode升级到版本3.2.3,以便在我的iphone项目上支持iOS4。使用静态分析器,我检查了内存管理问题 在我的一个例行程序中,我遇到了以下问题: 在将事件添加到日历后,我会生成一个用户警报,以向其提供状态 这运行正常,但内存分析器不喜欢我定义警报的方式。 我看不出编码问题,是吗?(我用“表示内存分析器提示,您永远不应该将alloc和init解耦init经常在幕后更改对象!试试看 NSString* foo=[NSString alloc]; NSLog(@"%p %@",
我看不出编码问题,是吗?(我用“表示内存分析器提示,您永远不应该将
alloc
和init
解耦init
经常在幕后更改对象!试试看
NSString* foo=[NSString alloc];
NSLog(@"%p %@", foo, [foo class]);
foo=[foo initWithString:@"bar"];
NSLog(@"%p %@", foo, [foo class]);
你会看到类似的东西
2010-07-14 01:00:55.359 a.out[17862:903] 0x10010d080 NSPlaceholderString
2010-07-14 01:00:55.363 a.out[17862:903] 0x100001070 NSCFString
这表明+[NSString alloc]
实际上并没有分配任何东西;相反,作业是initWithString
本身。我认为UIAlertView
不会这样做,但你永远不知道
总而言之:永远不要将
alloc
和init
解耦。我认为静态分析器只是假设每个人都使用[[…alloc]init]
,这样它就被你的代码弄糊涂了。分析器应该警告你不要解耦alloc
和init
你不应该解耦alloc
和init
经常在幕后更改对象!试试看
NSString* foo=[NSString alloc];
NSLog(@"%p %@", foo, [foo class]);
foo=[foo initWithString:@"bar"];
NSLog(@"%p %@", foo, [foo class]);
你会看到类似的东西
2010-07-14 01:00:55.359 a.out[17862:903] 0x10010d080 NSPlaceholderString
2010-07-14 01:00:55.363 a.out[17862:903] 0x100001070 NSCFString
这表明+[NSString alloc]
实际上并没有分配任何东西;相反,作业是initWithString
本身。我认为UIAlertView
不会这样做,但你永远不知道
总而言之:永远不要将
alloc
和init
解耦。我认为静态分析器只是假设每个人都使用[[…alloc]init]
,所以它被你的代码弄糊涂了。分析器应该警告你不要解耦alloc
和init
是的,我现在更改了例程,让2 2gether(alloc&init)和警告消失,谢谢:)请提交一份错误报告(关于不警告解耦alloc init)给LLVM静态分析器团队:帮社区一个忙!是的,我现在改变了常规,让2 2gether(alloc&init)和警告消失,谢谢:)请向LLVM静态分析器团队提交一份错误报告(关于不警告解耦alloc init):帮社区一个忙!