1

我在应用程序委托文件中使用 ActivityIndi​​catorC 类并为其分配对象,但在这里我得到内存泄漏,

self.ActIndicator=[[ActivityIndicatorC alloc] initwithWindow:window];

我在 dealloc 部分释放了 ActIndicator 这个对象,但直到我得到上述代码的相同潜在泄漏。

任何人都可以建议的任何解决方案。

4

3 回答 3

3

该对象被保留两次。使用时,self.ActIndicator =您调用 setter,编译器使用@property(retain,...)您放入界面中的方法为您创建。

self.ActIndicator=[[ActivityIndicatorC alloc] initwithWindow:window];
    ^ retainCount + 1                  ^^^^^ and +1 because of this.

你可以写

self.ActIndicator = [[[ActivityIndicatorC alloc] initwithWindow:window] autorelease];

或者

ActIndicator = [[ActivityIndicatorC alloc] initwithWindow:window];

您应该将名称更改为 actIndicator 或(甚至更好)activityIndi​​cator。只有类名应该以大写字母开头。

于 2011-03-17T09:03:41.627 回答
2

如果 ActIndicator 设置为保留属性。然后 .h 文件中存在泄漏 make @property(nonatominc ,retain) 到 @property(nonatominc ,assign) 或

ActivityIndicatorC *theActivity= [[ActivityIndicatorC alloc] initwithWindow:window];
self.ActIndicator=theActivity;
[theActivity release];
于 2011-03-17T09:03:05.853 回答
1

您必须手动释放使用 alloc-init 创建的对象。所以你应该写一个[ActIndicator release];或者只是自动释放它。

于 2011-03-17T09:08:37.657 回答