解决ARC强参考

时间:2014-07-26 19:21:21

标签: ios swift

我遇到了一个为TableView创建一些问题的类的问题。有一个类问题和一个类问题,它们包含一系列问题。

问题是,目前这些类之间的绑定很强,因此ARC无法释放内存。我已尝试过Swift Book中描述的关于弱引用或无主引用的内容,但我无法修复代码中的泄漏。

任何人都可以帮助我,如何防止Swift在对象之间建立强关系,这样ARC可以释放使用过的内存吗?

先谢谢

class Questions {

var questions: [Question] = []

init() {

    let validJSONData = NSData(contentsOfFile : NSBundle(forClass:ViewController.self).pathForResource("data", ofType: "json"))
    let json = JSONValue(validJSONData)

    for item in json["questions"].array!
    {

        var rowhHeight:CGFloat = 44.00

        if(item["template"].string! == "textViewCell") {
            rowhHeight = 100.00
        }

        var newQuestion = Question(qIndex: item["qid"].integer!, qText: item["qtext"].string!, qTemplate: item["template"].string!, qHidden: item["hidden"].bool!, qRowHeight: rowhHeight)

        questions.append(newQuestion)


    }
}

func getQuestions() -> NSArray {
   return questions     
}

deinit{
    println("questionS deinitialized")
}

}

class Question: NSObject {

var qIndex: Int
var qText : String
var qTemplate : String
var qHidden : Bool
var qRowHeight : CGFloat

init(qIndex: Int, qText: String, qTemplate: String, qHidden: Bool, qRowHeight: CGFloat) {

    self.qIndex = qIndex
    self.qText = qText
    self.qTemplate = qTemplate
    self.qHidden = qHidden
    self.qRowHeight = qRowHeight
}

deinit{
    println("question deinitialized")
} 
}

1 个答案:

答案 0 :(得分:0)

可能是因为您的模型类将使用您的Controller类创建强循环引用,希望这将解决您的问题。

class Questions {

var questions: [Question]!

init() {
    questions = [Question]()
    let validJSONData = NSData(contentsOfFile : NSBundle(forClass:ViewController.self).pathForResource("data", ofType: "json"))
    let json = JSONValue(validJSONData)

    for item in json["questions"].array!
    {

        var rowhHeight:CGFloat = 44.00

        if(item["template"].string! == "textViewCell") {
            rowhHeight = 100.00
        }

        var newQuestion = Question(qIndex: item["qid"].integer!, qText: item["qtext"].string!, qTemplate: item["template"].string!, qHidden: item["hidden"].bool!, qRowHeight: rowhHeight)

        questions.append(newQuestion)


    }
}

func getQuestions() -> NSArray {
    guard let objQuestion = questions else{return NSArray()}
    return questions
}

deinit{
    println("questionS deinitialized")
}

}

class Question: NSObject {

var qIndex: Int!
var qText : String!
var qTemplate : String!
var qHidden : Bool!
var qRowHeight : CGFloat!

init(qIndex: Int, qText: String, qTemplate: String, qHidden: Bool, qRowHeight: CGFloat) {

    self.qIndex = qIndex
    self.qText = qText
    self.qTemplate = qTemplate
    self.qHidden = qHidden
    self.qRowHeight = qRowHeight
}
deinit{
    println("question deinitialized")
}

}

相关问题