我有一个静态类女巫有两个属性,如下面......
@interface Global : NSObject
{
BarcodeScanner* scanner;
NSInteger warehouseID;
}
@property(assign) BarcodeScanner* scanner;
@property(assign) NSInteger warehouseID;
+(Global *)sharedInstance;
@end
#import "Global.h"
@implementation Global
@synthesize scanner,warehouseID;
+ (Global *)sharedInstance
{
static Global *globalInstance = nil;
if (nil == globalInstance) {
globalInstance = [[Global alloc] init];
globalInstance.scanner = [[BarcodeScanner alloc] init];
globalInstance.warehouseID = 1;
}
return globalInstance;
}
-(void) dealloc
{
[super dealloc];
}
@end
现在,当我在Xcode中分析项目时,我收到了扫描器和仓库ID属性的内存泄漏警告,当我尝试以dealloc方法释放它们时... ...
[[[Global sharedInstance] scanner]release];
我收到警告“对象引用计数的错误减少......”
我应该如何解决这个问题。
非常感谢您的帮助。
答案 0 :(得分:1)
警告是因为您的代码与Analyzer使用的规则不匹配。为了避免警告
示例(重新格式化以节省空间):
@class BarcodeScanner;
@interface Global : NSObject {
BarcodeScanner* scanner;
NSInteger warehouseID;
}
@property(retain) BarcodeScanner* scanner;
@property(assign) NSInteger warehouseID;
+(Global *)sharedInstance;
@end
@implementation Global
@synthesize scanner,warehouseID;
+ (Global *)sharedInstance {
static Global *globalInstance = nil;
if (nil == globalInstance) {
globalInstance = [[Global alloc] init];
globalInstance.scanner = [[[BarcodeScanner alloc] init] autorelease];
globalInstance.warehouseID = 1;
}
return globalInstance;
}
-(void) dealloc {
[scanner release];
[super dealloc];
}
@end
答案 1 :(得分:0)
将它留给自动释放池
globalInstance.scanner = [[[BarcodeScanner alloc] init] autorelease];