2011-12-17 56 views
1

我在這個應用程序中有3個類。繼承類中的內存泄漏與SQLite3和NSDictionary?

內存泄漏發生在DetailBrand2.m, DetailBrand2繼承自DetailType, 另外我有一個包裝類FairPriceDatabaseView,它與sqlite3進行通信。

我混淆了NSDictionary,NSString和Sqlite?

泄漏發生在這一行!!!?

NSDictionary * brandRow = [fairPrice_DB getProductRow:tempProductID];

NSString * message = [brandRow objectForKey:@「brandName」];

brandRow = nil;

我剛剛開始在iPhone應用程序,我提前感謝任何幫助,我已經閱讀了許多iPhone內存管理指南,但我無法解決它。問題是我沒有使用任何關鍵字看起來像分配,保留,複製或mutablecopy,但我有泄漏在這一行!

此行帶回一個包含productID,productName,brandName,price的NSDictionary。從包裝類,fairPrice_DB是FairPriceDatabaseView的一個實例。

DetailBrand2.h

@interface DetailBrand2 : DetailType 
{ 
    NSString * topBrandName; 
    NSNumber * tempProductID; 
    NSString * brandName; 
} 
@property (nonatomic, retain) NSString * topBrandName; 
@property (nonatomic, retain) NSString * brandName; 
@property (nonatomic, retain) NSNumber * tempProductID; 

-(void) loadbrandName; 

@end 

DetailBrand2.m

#import "DetailBrand2.h" 
#import "SeventhFairPriceAppDelegate.h" 

@implementation DetailBrand2 

@synthesize topBrandName,brandName,tempProductID; 

-(void) loadbrandName 
{ 
    if(!topBrandName) 
    { 
     [self loadDB]; 
     *NSDictionary * brandRow = [fairPrice_DB getProductRow:tempProductID];* 
     NSString *message = [brandRow objectForKey:@"brandName"]; 
     brandRow = nil; 
     self.topBrandName = message; 
//  self.brandName = self.topBrandName; 
    } 
} 

回答

0

問題是通過重寫dealloc方法解決:d

DetailBrands.m

-(void) dealloc 
    { 
      [self.tempProductID release]; 
      [self.topBrandName release]; 
      [self.brandName release]; 
      [super dealloc]; 
    } 
+0

我總是把'dealloc'方法在'm'文件的頂部,在'@ synthesize'語句的正下方。然後,記住保持它是最新的,並且在記住時更容易找到並更新它會更容易。 – 2011-12-20 04:29:17

+0

你好,這是通過最小化錯誤的好解決方案..這是我的第一個iPhone應用程序:D .. – Danial 2011-12-22 08:42:40