Ios 具有快速超慢速键入和自动完成功能的Xcode 6
当您键入代码时,尤其是使用自动完成时,是否只有我或使用Swift的Xcode 6(6.0.1)似乎是超慢的 一个普通的Objective-C类,即使在Swift项目中,其工作原理与以前几乎相同,因此是Swift杀死了它 其他人是否也经历过同样的不便?你知道如何提高绩效吗Ios 具有快速超慢速键入和自动完成功能的Xcode 6,ios,xcode,autocomplete,swift,xcode6,Ios,Xcode,Autocomplete,Swift,Xcode6,当您键入代码时,尤其是使用自动完成时,是否只有我或使用Swift的Xcode 6(6.0.1)似乎是超慢的 一个普通的Objective-C类,即使在Swift项目中,其工作原理与以前几乎相同,因此是Swift杀死了它 其他人是否也经历过同样的不便?你知道如何提高绩效吗 我试着玩一些设置,但没有运气 当然,我也尝试过重新启动Xcode和计算机,但没有成功 没有其他重的 应用程序已打开 我使用的是2009年年中的Macbook Pro(2.26 GHz Intel Core 2 Duo),带有
- 我试着玩一些设置,但没有运气
- 当然,我也尝试过重新启动Xcode和计算机,但没有成功
- 没有其他重的 应用程序已打开
想法/提示?我发现,当你:
- 在单个语句中使用长表达式(请参见)
- 在单个表达式中混合使用多个自定义运算符
abcd
。拆分为多行解决了此问题:
let r1 = a <&&> b
let r2 = r1 <&&> c
let r3 = r2 <||> d
设r1=ab
设r2=r1c
设r3=r2d
我希望你的案件包括在上述两个案件中。。。请在任何情况下发表评论您是否使用Spotify?
我在2009年年中(2.66Ghz)的iMac上安装了带有Xcode 6.1 GM的约塞米蒂GM。我发现一个名为“SpotifyWebHelper”的进程总是被标记为没有响应的红色,所以我在spotify中禁用了“从web开始”选项,现在Xcode似乎运行得更好了。在键入一些“简单”时,我还体验到了100%以上的CPU使用率代码。一些小技巧可以通过构造代码的方式使swift解析器更快 不要在字符串中使用“+”concatator。对我来说,这会很快触发缓慢。 每个新的“+”都会使解析器进入爬网状态,每次在函数体中添加新字符时,它都必须重新分析代码 而不是:
var str = "This" + String(myArray.count) + " is " + String(someVar)
var result = pi * 2 * radius
使用模板语法,在swift中解析似乎更有效:
var str = "This \(myArray.count) is \(someVar)"
这样,我基本上注意到strlen中没有内联变量“\(*)”的限制
如果您有使用+/*-的计算,则将其拆分为更小的部分
而不是:
var str = "This" + String(myArray.count) + " is " + String(someVar)
var result = pi * 2 * radius
使用:
它可能看起来效率较低,但swift解析器通过这种方式要快得多。
有些公式即使在数学上是正确的,但如果它们需要进行许多运算,就无法编译
如果您有一些复杂的计算,请将其放入func中。通过这种方式,解析器可以对其进行一次解析,而不必每次更改函数体中的某些内容时都对其进行重新解析
因为如果在函数体中有一个计算,那么swift解析器每次都会检查它的类型、语法等是否仍然正确。如果计算上方的一行发生更改,则计算/公式中的某些变量可能已更改。如果你把它放在一个外部函数中,那么它将被验证一次,swift很高兴它是正确的,并且不会不断地重新分析它,这导致了高CPU使用率
通过这种方式,我在打字时从每次按键的100%到低CPU。
例如,将这3行内联放在函数体中可以使swiftparser爬行
let fullPath = "\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist"
let spacesData = NSDictionary(contentsOfFile: fullPath )! // as Dictionary<String, AnyObject>
let spaces : AnyObject = spacesData["SpacesDisplayConfiguration"]!["Management Data"]!!["Monitors"]!![0]["Spaces"]!!
println ( spaces )
let fullPath=“\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist”
让spacesData=NSDictionary(contentsOfFile:fullPath)!//作为字典
让空格:AnyObject=spacesData[“SpacesDisplayConfiguration”]![“管理数据”]!![“监视器”]!![0][“空格”]!!
println(空格)
但是如果我把它放在func中,稍后调用它,swiftparser会更快
// some crazy typecasting here to silence the parser
// Autodetect of Type from Plist is very rudimentary,
// so you have to teach swift your types
// i hope this will get improved in swift in future
// would be much easier if one had a xpath filter with
// spacesData.getxpath( "SpacesDisplayConfiguration/Management Data/Monitors/0/Spaces" ) as Array<*>
// and xcode could detect type from the plist automatically
// maybe somebody can show me a more efficient way to do it
// again to make it nice for the swift parser, many vars and small statements
func getSpacesDataFromPlist() -> Array<Dictionary<String, AnyObject>> {
let fullPath = "\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist"
let spacesData = NSDictionary(contentsOfFile: fullPath )! as Dictionary<String, AnyObject>
let sdconfig = spacesData["SpacesDisplayConfiguration"] as Dictionary<String, AnyObject>
let mandata = sdconfig["Management Data"] as Dictionary<String, AnyObject>
let monitors = mandata["Monitors"] as Array<Dictionary<String, AnyObject>>
let monitor = monitors[0] as Dictionary<String, AnyObject>
let spaces = monitor["Spaces"] as Array<Dictionary<String, AnyObject>>
return spaces
}
func awakeFromNib() {
....
... typing here ...
let spaces = self.getSpacesDataFromPlist()
println( spaces)
}
//这里有一些疯狂的类型转换来让解析器安静下来
//Plist类型的自动检测非常简单,
//所以你必须教斯威夫特你的类型
//我希望这将在以后的swift中得到改进
//如果有一个带有
//getxpath(“SpacesDisplayConfiguration/Management Data/Monitors/0/Spaces”)作为数组
//xcode可以自动从plist中检测类型
//也许有人能告诉我一个更有效的方法
//同样,为了使swift解析器更好,许多变量和小语句
func getSpacesDataFromPlist()->数组{
let fullPath=“\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist”
让spacesData=NSDictionary(contentsOfFile:fullPath)!作为字典
将sdconfig=spacesData[“SpacesDisplayConfiguration”]设为字典
让mandata=sdconfig[“管理数据”]作为字典
让monitors=mandata[“monitors”]作为数组
让monitor=monitors[0]作为字典
让空格=监视器[“空格”]作为数组
返回空间
}
func awakeFromNib(){
....
…在这里打字。。。
设spaces=self.getSpacesDataFromPlist()
println(空格)
}
Swift和XCode 6.1仍然存在很多缺陷,但如果您遵循这些简单的技巧,编辑代码将再次成为可以接受的。我更喜欢swift,因为它去掉了.h文件,并且使用了更简洁的语法。仍然需要许多类型转换,如“myVar as AnyObject”,但与复杂的objective-c项目结构和语法相比,这是一个较小的缺点
还有另一个体验,我尝试了SpriteKit,它使用起来很有趣,但如果你不需要以60帧/秒的速度不断地重新上漆,它的效率相当高。如果您的“精灵”不经常更改,那么使用旧的CALayers对CPU来说会更好。如果您不更改层的.contents,那么CPU基本上是空闲的,但是如果您有一个SpriteKit应用程序在后台运行,那么其他应用程序中的视频播放可能会由于硬限制的60fps更新循环而开始中断
alias xcodeclean="rm -frd ~/Library/Developer/Xcode/DerivedData/* && rm -frd ~/Library/Caches/com.apple.dt.Xcode/*"
/*
* comment
/*
* embedded comment
*/
*/