/// Destroy the object the pointer points to.
///
/// Precondition: the memory is initialized.
///
/// Postcondition: the value has been destroyed and the memory must
/// be initialized before being used again.
func destroy()
术语object、memory 和value 在此上下文中是什么意思?
最佳答案
当您进行自己管理内存而不是让语言运行时为您处理的低级编程时,使用内存是一个两阶段过程。
首先,您分配一个内存区域。这只是保留了一些原始空间 block ,并没有将内存设置为具有任何特定值。内存可能包含随机垃圾,或者它可能包含以前位于该内存位置的一些数据。您永远不应依赖此内存区域具有任何特定值。
然后通过将该内存区域设置为某个明确定义的值来初始化它。也许您将其设置为全零。也许您将它分成 block 并将这些 block 视为保存在内存中的单独变量。也许您从其他地方复制了一些数据。
如果您使用的是像 Swift 这样的高级语言,您可能希望设置内存来表示一个对象——成员变量和其他支持数据的集合。这个数据集合以非常特殊的方式构建,因此您可以将其作为特定对象类型传递给其他函数,并调用其成员方法。要设置对象,您可以调用它的“init”方法来适本地设置成员变量。
这里,给内存设置一个“值”和在内存中创建一个“对象”是相似的概念,但术语“对象”意味着在更高的抽象层次上操作。
当您完成您的对象时,您将以相反的方式执行相同的步骤。首先,您可能会执行调用对象的取消初始化代码的“高级”操作。例如调用类的deinit()方法,或者释放对其他对象的引用。
此时,内存仍然分配给你,但它又被认为是你不能看的“垃圾”。但是您仍然需要“解除分配”内存(将其归还)以返回到您开始时的状态。或者,您可以选择不这样做,而是重新使用原始内存并就地创建新对象。
UnsafeMutablePointer 通过简化内存分配和释放来帮助您完成这个过程,但更重要的是,它可以帮助您在该内存中安全地创建对象,并且有许多用于移动控制的辅助方法该内存,从不同类型的源数据等初始化。
举个例子:
class MyClass {
init() { println("created") }
deinit { println("destroyed") }
}
struct MyStruct {
let i: Int
let d: Double
let c: MyClass
}
// allocate enough memory for 1 MyStruct object
// (you can also allocate enough memory for several objects)
var aStruct = UnsafeMutablePointer<MyStruct>.alloc(1)
// no MyStruct has been created yet – we’ve just allocated
// enough memory to hold one
// set that memory to represent a new MyStruct object
aStruct.initialize(MyStruct(i: 4, d: 2.2, c: MyClass()))
println("Memory contains a MyStruct with i = \(aStruct.memory.i)")
// should see the class print "destroyed"
aStruct.destroy()
// at this point, "memory" should be conisidered rubbish
// reinitialize it with something new:
aStruct.initialize(MyStruct(i: 8, d: 3.3, c: MyClass()))
println("Memory contains a MyStruct with i = \(aStruct.memory.i)")
// should see the class print "destroyed"
aStruct.destroy()
// finally, deallocate the raw memory
aStruct.dealloc(1)
显然,使用 UnsafeMutablePointer 这样的名称,如果您不知道自己在做什么,使用它仍然很危险。但它仍然比没有这种帮助程序直接访问内存安全得多。
关于ios - 关于 UnsafeMutablePointer 的 destroy() 的术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27670643/
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
在Rails4.1中,ActiveRecorddestroy_all是否将整个函数包装在一个事务中?例如,如果我有一堆记录,我对其执行了destroy_all操作,它们对这些单独的对象运行了一些回调,其中一个失败了,整个操作会在那个时候回滚吗? 最佳答案 看起来不像:#Fileactiverecord/lib/active_record/relation.rb,line386defdestroy_all(conditions=nil)ifconditionswhere(conditions).destroy_allelseto_a.
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案
术语中文解释Ability原子化服务帮助用户完成任务的原子化服务,和用户的意图进行关联。Fulfillment服务履行通过图标,卡片,语音等形式呈现用户意图。开发者通过接口的方式,处理用户意图,返回内容。Intent意图用于表达用户想要达成的目标或完成的任务。HUAWEIAssistant智能助手“无微不智”的个人助手,通过不断的学习用户的使用习惯,不断的为用户提供贴心的精准的便捷的个性化服务。AISearch全局搜索用户可快速搜索关键词,与之匹配的原子化服务则会出现在搜索结果中。SmartService智慧服务用户订阅原子化服务,在到达特定触发条件(时间、地点、事件)后,卡片推送至用户智能助
1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>