2016-03-30 13 views
0

メモリの割り当てに問題があります。 私のアプリを起動して特定のページに来ると、そのページに来るたびにメモリの数が30MB増えます。Swiftを使用したメモリ管理の問題

弱い変数と宣言された変数としてIBOutletsを追加しましたか? (つまり、オプション)、メモリはオブジェクトの割り当てを解除していませんが、ページをアンロードするときにdeinit()が呼び出されません。
以下

マイコード-----------

宣言

//[Mapped Outlet With Front End] 
@IBOutlet weak var testInd: UIActivityIndicatorView! 
@IBOutlet weak var uiPendingView: UIView! 
@IBOutlet weak var uiDraftView: UIView! 
@IBOutlet weak var propertyListingTableView: UITableView! 
@IBOutlet weak var uiCompletedView: UIView! 
@IBOutlet weak var propertiesMap: MKMapView! 
@IBOutlet weak var btnSynch: UIButton! 
@IBOutlet weak var lblPendingStatus: UILabel! 
@IBOutlet weak var lblDraftStatus: UILabel! 
@IBOutlet weak var lblCompleteStatus: UILabel! 
@IBOutlet weak var networkLabel: UILabel! 
@IBOutlet weak var tableEmtyLabel: UILabel! 
@IBOutlet weak var lblPropertyLabel: UILabel! 
@IBOutlet weak var lblPendingLabel: UILabel! 
@IBOutlet weak var lblDraftLabel: UILabel! 
@IBOutlet weak var lblCompletedLabel: UILabel! 
@IBOutlet weak var segmentControllerSynch: UISegmentedControl! 
@IBOutlet weak var googleMapView: GMSMapView! 
@IBOutlet weak var propertyLabelView: UIView! 

//[Local variable declaration] 
var annotation: CustomPointAnnotation? 
var annotationArray : [CustomPointAnnotation]? 
var properties:[Property] = [Property]() 
var tempProperties:[Property] = [Property]() 
var pushProperties:[Property] = [Property]() 
var getProperties:[Property] = [Property]() 
var draftProperties:[Property] = [Property]() 
var failedProperties:[Property] = [Property]() 
var property: Property? 
var company: Company? 
var companies: [Company]? 
var allProperties: [Property]? 
var xmlElementData : NSData! 
var filePath:NSString? 
var xmlParseString: NSString? 
var xmlNSData: NSData? 
var pendingFilterTick = false 
var draftFilterTick = false 
var compeletdFilterTick = false 
var fromPopover = false 
var errorStr: String? 
var tokenStr: String? 

var resultDict: NSDictionary? 
var sortingImg : UIImage = UIImage(named: "Sorting")! 
var menuImg : UIImage = UIImage(named: "Slider")! 
var leftLogo : UIImage = UIImage(named: "logo")! 
var sortingBtn : UIBarButtonItem? 
var menuBtn : UIBarButtonItem? 
var leftBtn : UIBarButtonItem? 
var emptyView: UIView! 
var actInd: UIActivityIndicatorView? 
var container: UIView? 
var lblProcess: UILabel? 
var loadingView: UIView? 
let nsFileManager = NSFileManager.defaultManager() 

//[Local class declaration] 
var constants = Constants() 
var parser = XMLParser() 
var utility = Utility() 
var fileMgr = FileManagement() 
var xmlParser = XMLParser() 
var netUtil = NetworkUtil() 
var dict:Dictionary<String,String> = Dictionary<String,String>() 
let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate 
var unitCount = 0 
var dateUtil = DateUtils() 
var synchCompanies:[Company]? 
var controllerUtil = ControllerUtil() 
var errorHandling = ErrorHandling() 

//[Variable declaration for the Google map] 
var locationManager = CLLocationManager() 
var didFindMyLocation = false 

override func viewDidDisappear(animated: Bool) { 
    super.viewDidDisappear(animated) 

    print("viewDidDisappear") 

    if let superView = self.view.superview 
    { 
     superView.removeFromSuperview() 
    } 

    fileMgr.deallocateReferences(xmlNSData!) 
    // fileMgr: FileManagement = nil 

    tempProperties = [] 
    pushProperties = [] 
    getProperties = [] 
    draftProperties = [] 
    failedProperties = [] 


//  testInd = nil 
//  uiPendingView = nil 
//  uiDraftView = nil 
//  propertyListingTableView = nil 
//  uiCompletedView = nil 
//  propertiesMap = nil 
//  btnSynch = nil 
//  lblPendingStatus = nil 
//  lblDraftStatus = nil 
//  lblCompleteStatus = nil 
//  networkLabel = nil 
//  tableEmtyLabel = nil 
//  lblPropertyLabel = nil 
//  lblPendingLabel = nil 
//  lblDraftLabel = nil 
//  lblCompletedLabel = nil 
//  segmentControllerSynch = nil 
//  googleMapView = nil 
//  propertyLabelView = nil 


} 
deinit{ 
    print("DEINIT") 
    googleMapView.removeObserver(self, forKeyPath: "myLocation", context: nil) 
} 
+0

他の何かがあなたのコントローラへの強い参照を保持していて、それを解放していない、通常は "addObserver"メソッドは強参照をしません、あなたはdidLoadのキーパスにオブザーバを一時的に追加しないことでテストできます。 – ogres

+1

実際にView Controllerを意味するときは、「ページ」を参照しています。 – timbo

+0

リンゴの文書からKVOメソッド 'レシーバーもオブザーバーも保持されません。 。 – Andrea

答えて

0

あなたのビューコントローラのdeinitは、その後、誰かが保持している、と呼ばれていない場合それに対する強い言及。犯人を見つけてください。

BTW。スーパービューで遊ぶのは良い考えではないでしょう。それはあらゆる種類のトラブルを引き起こす可能性があります。

+1

Deinitのコントローラを保持している強いオブジェクトがどのように分かっていますか? –

関連する問題