Cim*_*imm 0 constructor initialization rubymotion
我是RubyMotion的新手,并试图了解对象初始化的工作原理.假设一个带有一个类和一个实例方法的简单类:
class Something
def self.getSomething
BubbleWrap::HTTP.post("http://example.com") do |response|
p response
end
end
def getSomething
BubbleWrap::HTTP.post("http://example.com") do |response|
p response
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在,为什么以下工作:
Something.getSomething
Run Code Online (Sandbox Code Playgroud)
并且下一个片段不是,有时候(运行此片段和运行时在10次中崩溃了8次).
something = Something.new
something.getSomething
Run Code Online (Sandbox Code Playgroud)
我做错了.任何正确方向的指针?
使用实例变量:
@something = Something.new
@something.getSomething
Run Code Online (Sandbox Code Playgroud)
RubyMotion有一些与局部变量和块相关的错误.您正在分配something
然后调用something.getSomething
,然后使用BubbleWrap的异步HTTP.post
方法.BubbleWrap HTTP块运行,但与此同时,您正在调用的方法something.getSomething
已完成执行.由于something
是局部变量,因此在方法退出时会收集垃圾.因此,当HTTP请求完成并调用块时,该块不再存在.
您可能会看到随机不一致的错误(并且偶尔会出现一次实际的工作请求),因为每次存储块的内存位置都被回收用于其他内容(或者偶尔回收一次,或者根本不回收它所以块仍在那里).当您使用实例变量时,这一切都不会发生,因为当调用方法完成执行时,实例变量会一直存在.
这种行为绝对是意外的; 我知道已经提交了几个问题(包括我自己)来解决这个问题.
归档时间: |
|
查看次数: |
528 次 |
最近记录: |