我知道这是一个长效的,但由于我需要此代码才能工作,也许这里有人可以提供帮助。不规则形状的UIButton中的内存泄漏
我在我的一个iPhone应用程序中使用CodeProject.com中的Irregularly Shaped Buttons代码。很好用,但是Instruments报告了两次内存泄漏。我在一个标准的UIViewController中使用了代码,但这是在UINavigationController中,这可能是问题所在。
第一泄漏报告在clickThruButton.m的myInit方法
- (void) myInit
{
// Set so that any alpha > 0x00 (transparent) sinks the click
uint8_t threshold = 0x00;
self.alphaMask = [[AlphaMask alloc] initWithThreshold: threshold];
[self setMask];
}
我可以看到发布楼下,所以我不知道为什么会泄漏:
- (void)dealloc
{
[self.alphaMask release];
[super dealloc];
}
也许我们首先需要检查self.alphaMast在执行alloc之前是否为零?
第二个是在calcHitGridFromCGImage法在AlphaMask.m结束:出现在NSData的分配
// COPIES buffer
// is AUTORELEASED!
// http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/
// MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH
NSData* ret = [NSData dataWithBytes: (const void *) dest
length: (NSUInteger) destBytes ];
CGContextRelease (alphaContext);
free (alphaGrid);
free (dest);
return ret;
泄漏。没有分配,新的或复制,那么泄漏的位置在哪里?
我会真的感谢您可以在这里提供的任何帮助。我知道这是一个延伸,但我需要这个尽快工作。谢谢!
更新:
完整的源代码可以在上面的链接中找到,但是这可能会帮助清理alphaMask定义:
//
// ClickThruButton.h
// Test
//
// Pi
@class AlphaMask;
@interface clickThruButton : UIButton
{
@private AlphaMask* _alphaMask;
}
@end
和...
//
// ClickThruButton.m
// Test
//
// Pi
#import "clickThruButton.h"
#import "AlphaMask.h"
@interface clickThruButton()
@property (nonatomic, retain) AlphaMask* alphaMask;
- (void) myInit;
- (void) setMask;
@end
@implementation clickThruButton
@synthesize alphaMask = _alphaMask;
太棒了!我*认为*修正了它。谢谢! – Axeva 2010-10-09 21:41:44