我下面有一个简单的课程
import Foundation
public class UsefulClass: NSObject{
var test:NSNumber{
get{return self.test}
set{
println(newValue)
self.test = newValue
}
}
override init() {
super.init()
self.test = 5;
}
}
我在这里初始化
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var testClass = UsefulClass()
}
}
但是,这导致xcode打印出200 5s,然后由于EXC_BAD_ACCESS code = 2而崩溃。为什么会发生这种情况?
@vadian在他的回答中提供了一个解决方案,它可以解决您的问题。让我解释一下发生了什么。
您已经创建了一个计算属性,即一个没有变量支持的属性,取而代之的是,getter和setter方法通常在另一个存储的属性上进行一些处理,以便分别返回一个值并设置一个新值。
这是您的计算属性:
var test: NSNumber {
get { return self.test }
set {
println(newValue)
self.test = newValue
}
}
查看getter的实现:
return self.test
它有什么作用?它读取test
当前实例的属性,并返回它。哪个test
物业?就是这个:
var test: NSNumber {
get { return self.test }
set {
println(newValue)
self.test = newValue
}
}
是的,它是相同的属性。您的getter所做的是递归且无限期地自我调用,直到在运行时发生崩溃为止。
相同的规则适用于二传手:
self.test = newValue
它会不断调用自身,直到应用程序崩溃为止。
问题内容: 我的二传手迅速遇到了一个奇怪的问题。我有带有代码的PlayingCard类: 我在另一个类中使用此init()方法,实现如下所示: 当代码看起来像上面的代码时,我在一行中遇到了一个错误: 但是,当我从 等级 和 西服 属性中删除setter和getter时,它工作正常,没有出现错误。 您能解释一下为什么出现此 EXC_BAD_ACCESS 错误吗? 谢谢您的帮助 问题答案: 通过写这个
Hello World 如何调试 如何新增一个Controller 如何使用models/dao 如何使用models/service
介绍 通过本章节你可以了解到 Vant 的安装方法和基本使用姿势。 安装 通过 npm 安装 在现有项目中使用 Vant 时,可以通过 npm 或 yarn 进行安装: # Vue 2 项目,安装 Vant 2.x 版本: npm i vant -S # Vue 3 项目,安装 Vant 3.x 版本: npm i vant@next -S 通过 CDN 安装 使用 Vant 最简单的方法是直
安装 npm i feart --save-dev # or yarn add feart 引入组件 No.1 : 使用 babel-plugin-import (推荐) # 安装 babel-plugin-import 插件 npm i babel-plugin-import --save-dev // 在 .babelrc 或 babel.config.js 中添加插件配置 {
本节课程提供一个使用 Spark 的快速介绍,首先我们使用 Spark 的交互式 shell(用 Python 或 Scala) 介绍它的 API。当演示如何在 Java, Scala 和 Python 写独立的程序时,看编程指南里完整的参考。 依照这个指南,首先从 Spark 网站下载一个 Spark 发行包。因为我们不会使用 HDFS,你可以下载任何 Hadoop 版本的包。 Spark Sh
快速上手 本节将介绍如何在项目中使用 Element。 使用 vue-cli@3 我们为新版的 vue-cli 准备了相应的 Element 插件,你可以用它们快速地搭建一个基于 Element 的项目。 使用 Starter Kit 我们提供了通用的项目模板,你可以直接使用。对于 Laravel 用户,我们也准备了相应的模板,同样可以直接下载使用。 如果不希望使用我们提供的模板,请继续阅读。 引