Iphone Don';我不懂记忆分析

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 %@",

我已经将我的XCode升级到版本3.2.3,以便在我的iphone项目上支持iOS4。使用静态分析器,我检查了内存管理问题

在我的一个例行程序中,我遇到了以下问题: 在将事件添加到日历后,我会生成一个用户警报,以向其提供状态

这运行正常,但内存分析器不喜欢我定义警报的方式。
我看不出编码问题,是吗?(我用“表示内存分析器提示,您永远不应该将
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):帮社区一个忙!