每当我尝试创建特定类的实例时,整个应用程序崩溃(EXC_BAD_ACCESS)

时间:2018-03-20 13:58:33

标签: ios swift initialization infinite-loop

我的代码似乎因无限循环而崩溃,但我找不到错误。 有人可以帮助我查看代码吗?

这是我的控制器:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches{
        let location = touch.location(in: self.view)
        let x = Float(location.x)
        let y = Float(location.y)
        let newTouch = Touch(latitude: x,longitude: y)
        TouchService().addTouch(touch: newTouch, grid: _grid)
    }
}

我的模特:

import Foundation

class Touch {

    var _lat: Float
    var _long: Float
    var _startingPoint: Touch

    init(latitude lat: Float, longitude long: Float){
        self._lat = lat
        self._long = long
        self._startingPoint = Touch(latitude: lat, longitude: long)
    }
}

我猜我使用init()函数的方式有问题。

亲切的问候和提前谢谢, 克里斯

2 个答案:

答案 0 :(得分:1)

问题

您的初始化程序会创建一个无限循环。

-keepnames class com.example.test.domain.Person {

}

评论出来,你会看到。


<强>解决方案

为您的值(组合)创建单独的类或结构。

//Touch(latitude: lat, longitude: long) calls the initializer again.
//Since you are inside the initializer, it creates an infinite loop.  
self._startingPoint = Touch(latitude: lat, longitude: long)

class AngularLocation {
    var _lat: Float
    var _long: Float

根据您的需要调整。

答案 1 :(得分:0)

这是您的代码的工作方式

class Touch {

var _lat: Float
var _long: Float
var _startingPoint: Touch

init(latitude lat: Float, longitude long: Float){
    self._lat = lat
    self._long = long
    self._startingPoint = Touch(latitude: lat, longitude: long) // It invokes recursively your Touch class with no end, so it causes infinite loop
   }
}

<强>解决方案

您必须为StartingPoint创建不同的类。