我发现在以下场景下,我的UIViewcontroller没有调用deInit()
。我正在使用这个代码扩展,通过添加敲击手势识别器来使我的生活更轻松。
https://gist.github.com/Saoudrizwan/548AA90BE174320FBAA6B3E71F01F6AE
我在我的一个风险投资公司中使用了这段代码,我把它精简到了最小的代码量:
在viewdidload()
中,我执行了以下操作:
// When the user taps on a label, have its related textbox automatically get the caret so they can type
// Add tapping so when you tap on a label it makes the corresponding textbox first responder
lblSubject.addTapGestureRecognizer {
self.txtSubject.becomeFirstResponder()
}
这一行似乎是:
self.txtSubject.becomeFirstResponder()
问题是--当我在闭包中留下上面的这一行时,deinit()
不会在我的VC中调用。当我取出上面的行或用类似print(“Hello World”)
deInit()
的东西替换它时,会正确地调用。txtSubject是@IBOutlet弱var txtSubject:uitextfield!
我不完全确定在这里做什么。我读到,当您触发becomefirstresponder()
时,调用regish firstresponder()
是很重要的,但即使我没有点击标签(这样就不会给becomefirstresponder()
连调用的机会),我仍然无法点击deinit()
有什么我可以看得更远的地方吗?
非常感谢。
这是一个典型的保留循环。闭包中的self.
提醒您考虑这一点。我假设self
保留了LBLSubject
,并且(通过一个objc_association_retrain
关联的键),LBLSubject
保留了self
,因为它被这个闭包捕获。
但是,这里并不需要self
。您只需要txtsubject
。所以你可以捕捉到:
lblSubject.addTapGestureRecognizer { [txtSubject] in
txtSubject.becomeFirstResponder()
}
或者,您可以回到巨大的弱自
锤子(尽管这往往被过度使用):
lblSubject.addTapGestureRecognizer { [weak self] in
self?.txtSubject.becomeFirstResponder()
}
探索这类bug的最好方法是使用Xcode的内存图。
回顾一下关于自动引用计数的Swift文档也是一个好主意。
问题内容: 我使用 CMake* (3.4.1)根据 Boost 库构建一个C ++项目。宿主平台是 Linux ,目标是宿主和 交叉构建 Android NDK。 * 我只使用Boost头文件,而我只是下载/提取了boost文件夹(并且我没有目录)。 在我的文件中,我这样声明对Boost的依赖关系: 我将构建配置如下: 这实际上 可以 像我的 本机 版本一样工作。 现在,当我以完全相同的方式(仅
这是我的片段: Java中的inputText片段: 原因:java.lang.IllegalStateException:Fragment de.company.android.inputtext.InputTextFragment没有创建视图。在Android.app.fragmentManagerimpl.oncreateView(fragmentManager.java:2253),在An
我正在通过https://www.influxdata.com/blog/getting-started-python-influxdb/留档来查询Python的InspxDB。 我能够创建数据库: 另外,我还在数据库中发送数据: 调用json主体为: 但是很快,我想从数据库中查询指标: 此查询导致错误: 文件ipython-inport-31-6e47204db16b,第1行,在模块client
我有一个碳/石墨堆栈与一些非常基本的保留模式设置。除了一些统计数据之外,这些保留期工作得很好--这些似乎只持续一周。 我的存储-schemas.conf: 在受影响的.wsp上使用whisper-info.py会显示以下内容: 有人能提出我可能错过的什么吗?
我已经安装了boost库,它们位于中。我认为问题与可执行文件只在它所在的目录中查找有关,因为当我在其中粘贴'libboost_atomic.dylib'时,它不再介意它了。不幸的是,它抱怨找不到下一个boost库。 有没有一个简单的方法来解决这个问题?
我已经安装了boost库,它们位于中。我认为这个问题与可执行文件只在它所在的目录中查找有关,因为当我将'libboost_atomic.dylib'粘贴在那里时,它不再介意它了。不幸的是,它抱怨找不到下一个boost库。 有什么简单的方法可以解决这个问题吗?