Самый простой способ - обозначить тип блока как @objc_block
, и теперь вы можете применить его к AnyObject, сравнимому с ===
. Пример:
typealias Ftype = @objc_block (s:String) -> ()
let f : Ftype = {
ss in
println(ss)
}
let ff : Ftype = {
sss in
println(sss)
}
let obj1 = unsafeBitCast(f, AnyObject.self)
let obj2 = unsafeBitCast(ff, AnyObject.self)
let obj3 = unsafeBitCast(f, AnyObject.self)
println(obj1 === obj2) // false
println(obj1 === obj3) // true
Для статического анализа кода Вы имеете XREF и DIALYZER, для профилирования Вас может использовать cprof, fprof или eprof, можно получить хорошую ссылку здесь ...
'fprof' модуль включает профильные функции. От fprof документация модуля :
fprof:apply(foo, create_file_slow, [junk, 1024]).
fprof:profile().
fprof:analyse().
fprof:apply
(или trace
) выполняет функцию, profile
преобразовывает файл трассировки во что-то полезное, и analyse
распечатывает сводку. Это даст Вам список наблюдаемых вызовов функции, что назвало их, и что они назвали, а также тактовая стеной информация о синхронизации