我正在尝试找出适合在Swift中使用的单例模型.到目前为止,我已经能够得到一个非线程安全模型:
class var sharedInstance: TPScopeManager {
get {
struct Static {
static var instance: TPScopeManager? = nil
}
if !Static.instance {
Static.instance = TPScopeManager()
}
return Static.instance!
}
}
Run Code Online (Sandbox Code Playgroud)
在Static结构中包装单例实例应允许单个实例在没有复杂命名方案的情况下不与单例实例发生冲突,并且它应该使事情变得相当私密.显然,这个模型不是线程安全的,所以我尝试将dispatch_once添加到整个事情中:
class var sharedInstance: TPScopeManager {
get {
struct Static {
static var instance: TPScopeManager? = nil
static var token: dispatch_once_t = 0
}
dispatch_once(Static.token) { Static.instance = TPScopeManager() }
return Static.instance!
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个编译器错误dispatch_once
:
无法将表达式的类型'Void'转换为'()'类型
我已经尝试了几种不同的语法变体,但它们似乎都有相同的结果:
dispatch_once(Static.token, { Static.instance = TPScopeManager() })
Run Code Online (Sandbox Code Playgroud)
dispatch_once
使用Swift 的正确用法是什么?我最初认为问题出在块中,因为dispatch_once
错误消息,但我看的越多,我认为可能是获得() …
我正在使用C++编写其他代码,我发现了对某个函数的奇怪调用func()
.这是一个例子:
if(condition)
func();
else
(*this).func();
Run Code Online (Sandbox Code Playgroud)
func()
和之间有什么区别(*this).func()
?
调用func()
和(*this).func()
执行不同代码的情况是什么?
在我的情况下,func()
不是宏.它是基类中的虚函数,在基类和派生类中都有实现,并且没有空闲func()
.在if
位于在基类的方法.
例如,我尝试了类似的东西mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()]
,但是没有用.
有这种功能的某种结构吗?
我意识到我可以用一堆def
语句轻松地做到这一点:
def func1():
foo()
bar()
goo()
Run Code Online (Sandbox Code Playgroud)
但是我需要的陈述数量变得非常笨拙且难以记住.将它们很好地包装在字典中会很好,我可以一次又一次地检查键.
我有一个方法应该支持从任何队列调用,并应该期望.它在后台线程本身运行一些代码,然后在它返回一个值的块参数时使用dispatch_get_main_queue.我不希望它强制它进入主队列,如果不是它进入方法时.有没有办法获得指向当前调度队列的指针?
基本上,当setMethod
or或(setGeneric
)中存在许多参数时,它的工作速度非常慢.
这是一个基本的例子:
setClassUnion(name = "mNumeric", members = c("missing", "numeric"))
setClass(Class = "classA", representation = representation(ID = "character"))
setGeneric("foo", function(r, i, ..., m = 1, D = 1, U = 999, K = 0.005,
E1 = -5, E2 = 5, E3 = 1, E4 = 1, E5 = 1, E6 = 1,
A1 = -5, A2 = 5, A3 = 1, A4 = 1, A5 = 1, A6 = 1)
{standardGeneric ("foo")})
setMethod(f = "foo",
signature = …
Run Code Online (Sandbox Code Playgroud) 在我的Android应用程序中,我遇到了一个非常奇怪的崩溃,当我在我的UI上按下一个按钮(图像)时,整个应用程序冻结,几秒钟后我就会出现可怕的强制关闭对话框.
以下是在日志中打印的内容:
WARN/WindowManager(88): Key dispatching timed out sending to package name/Activity
WARN/WindowManager(88): Dispatch state: {{KeyEvent{action=1 code=5 repeat=0 meta=0 scancode=231 mFlags=8} to Window{432bafa0 com.android.launcher/com.android.launcher.Launcher paused=false} @ 1281611789339 lw=Window{432bafa0 com.android.launcher/com.android.launcher.Launcher paused=false} lb=android.os.BinderProxy@431ee8e8 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{4335fc58 package name/Activity paused=false}}}
WARN/WindowManager(88): Current state: {{null to Window{4335fc58 package name/Activity paused=false} @ 1281611821193 lw=Window{4335fc58 package name/Activity paused=false} lb=android.os.BinderProxy@434c9bd0 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{4335fc58 package name/Activity paused=false}}}
INFO/ActivityManager(88): ANR in process: package name (last in package name)
INFO/ActivityManager(88): Annotation: keyDispatchingTimedOut
INFO/ActivityManager(88): …
Run Code Online (Sandbox Code Playgroud) 出于好奇:CLR如何调度虚拟方法调用接口成员到正确的实现?
我知道CLR为每种类型维护的VTable,每个方法都有方法槽,并且每个接口都有一个额外的方法槽列表,指向相关的接口方法实现.但我不明白以下内容:CLR如何有效地确定从类型的VTable中选择哪个接口方法槽列表?
从2005年5月刊的MSDN杂志中了解CLR如何创建运行时对象的文章Dril Into .NET Framework Internals讨论了由接口ID索引的进程级映射表IVMap.这是否意味着同一进程中的所有类型都具有指向同一IVMap的相同指针?
它还指出:
如果
MyInterface1
由两个类实现,则IVMap表中将有两个条目.该条目将指回嵌入在MyClass
方法表中的子表的开头.
CLR如何知道要选择哪个条目?它是否进行线性搜索以查找与当前类型匹配的条目?还是二元搜索?或者某种直接索引并且有一个可能有很多空条目的地图?
我还通过C#第3版阅读了CLR中的接口章节,但它没有谈到这一点.因此,这个问题的答案没有回答我的问题.
我无法理解使用D3事件和调度功能.我有一个我一直在研究的图表示例:" 带有图例的垂直条形图".
绘制图表和图例很容易,但我想添加突出显示每个栏的功能,因为我将鼠标悬停在位于图表右侧的相关文本图例上.
我已经阅读了所有的事件文档,甚至看了很多例子,其中大部分都很复杂,但我似乎错过了一些东西.有谁知道如何最好地完成文本图例鼠标悬停功能,调度事件以自动更改相应垂直条的颜色?
我无法弄清楚如何在Swift 3.0中重复调度计时器.我的代码:
let queue = DispatchQueue(label: "com.firm.app.timer",
attributes: DispatchQueue.Attributes.concurrent)
let timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(rawValue: UInt(0)),
queue: queue)
timer.scheduleRepeating(deadline: DispatchTime.now(),
interval: .seconds(5),
leeway: .seconds(1)
)
timer.setEventHandler(handler: {
//a bunch of code here
})
timer.resume()
Run Code Online (Sandbox Code Playgroud)
计时器只会触发一次并且不会像它应该的那样重复.我怎样才能解决这个问题?
我一直试图围绕调度方法,特别是在Django(请参阅下面的代码示例).但是,我似乎无法确切地知道它的作用.我试图从Django文档中获得一些理解,但没有找到他们提供有关该主题的信息.根据我的理解,它是一个监听器,可以监听页面上发生的所有事件,但我不确定是否是这种情况?谢谢.
class OrderDetail(DetailView):
model = Order
def **dispatch**(self, request, *args, **kwargs):
try:
user_check_id = self.request.session.get("user_checkout_id")
user_checkout = UserCheckout.objects.get(id=user_check_id)
except UserCheckout.DoesNotExist:
user_checkout = UserCheckout.objects.get(user=request.user)
except:
user_checkout = None
obj = self.get_object()
if obj.user == user_checkout and user_checkout is not None:
return super(OrderDetail, self).dispatch(request, *args, **kwargs)
else:
raise Http404
Run Code Online (Sandbox Code Playgroud)