正如大多数人可能已经看到的那样,Xcode 4已于今天正式发布.现在我知道很多开发人员一直在使用预览版本,如果人们可以发布他们使用这些版本学到的任何好的提示,技巧或键盘快捷方式,现在他们不再使用NDA .这对于那些从Xcode 3升级的人来说特别有用(就像我一样,现在下载).
注意:Apple已经发布了一个" 过渡指南 ",其中包含了从版本3到版本4的大量内容,但我敢打赌,那里有许多人都学到的很棒的技巧.
我按下了ALT + CMD + R并在Arguments> Environment Variables中激活了NSZombieEnabled.此外,我在诊断>内存管理>启用僵尸对象中激活它.
但是,当我构建并运行时,在某些时候我的应用程序崩溃,在控制台中给我这个无用的消息:
*** -[CALayer retainCount]: message sent to deallocated instance 0x656b260
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪也没用.我将细节级滑块一直向右移动.线程1只是告诉我这个:

一切都是系统所有,并没有一行与我的应用程序相关.所以很明显NSZombiesEnabled不能像在Xcode 3中那样工作,它停在死对象上.
有没有办法弄清楚哪个 CALayer过早解除分配?
更新:因此,在建立和运行大约100次后突然问题消失了!它完全消失了!最好的部分:我没有以任何方式修改我的代码!在中间我用clean命令清理了build文件夹和项目几次,并在Simulator中删除了几次app.
更新2:幸运的是问题再次出现.而现在似乎持久.幸运的是,因为我更喜欢找到根本原因,而不是随意地烦扰用户.
更新3:最后偶然发现它:
startButton = newBttn;
Run Code Online (Sandbox Code Playgroud)
本来应该:
self.startButton = newBttn;
Run Code Online (Sandbox Code Playgroud)
startButton是一个保留属性,在-dealloc我发布了它.因此,它在大多数(但不是全部)情况下得到了过度释放,在视图消失之后它崩溃了,给出了奇怪的CALayer retainCount消息.
Zombies Instrument(CMD + I)最终指出它与按钮有关.只是不知道为什么和在哪里.
Clang Static Analyzer没有抱怨这个明显的故障.
我在Xcode 4中创建了一个全新的iOS项目,并包含了单元测试.默认应用程序有2个目标,主应用程序和单元测试包.使用"产品>测试"(Command-U)构建应用程序,构建单元测试包,启动iOS模拟器并运行测试.现在,我希望能够从命令行执行相同的操作.命令行工具(xcodebuild)没有"测试"操作,但似乎我应该能够直接构建单元测试包目标,因为它取决于应用程序本身.但是,运行:
xcodebuild -target TestAppTests -sdk iphonesimulator4.3 -configuration Debug build
Run Code Online (Sandbox Code Playgroud)
给出以下消息:
/Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/Tools/RunPlatformUnitTests:95: warning: Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set).
Run Code Online (Sandbox Code Playgroud)
这似乎是一个谎言,因为当我从GUI运行Command-U时,为我的单元测试包目标设置了测试主机.我之前看过有关逻辑测试和应用程序测试之间分离的帖子,但似乎Xcode 4消除了这种区别.我是如何从命令行运行测试的?
尝试在我的设备上运行应用程序时收到以下错误.
error: failed to launch '/Users/michael/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphoneos/Word Processor.app/Word Processor' -- No such file or directory (/Users/michael/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphoneos/Word Processor.app/Word Processor)
Run Code Online (Sandbox Code Playgroud)
该应用程序在模拟器中运行良好.当我尝试在设备上进行调试时,它似乎会复制应用程序(我可以看到图标),但随后会停止上面的消息.Xcode表示它正在我的iPod上运行应用程序,但我的iPod上什么也没发生.
当我点击应用程序时,应用程序似乎启动,但似乎缺少资源.我的其他项目工作正常.我需要更改哪些设置才能使其正常工作.查看错误消息,它似乎在我的Mac中查找应用程序.但这是没有意义的,因为我试图在我的第四代iPod touch上运行它.我正在使用Xcode 4.3.1和iOS 5.1
我想添加一个标题搜索路径的路径.但是在构建设置中,当我双击标题搜索路径时...它没有弹出一个新窗口我可以输入..我做错了什么?
我是Objective C的新手,正在读一本名为"Visual Quickstart Guide:Objective-C"的书,作者是Steven Holzner,Peachpit出版社
在第6章:面向对象编程中,有一节名为Using Class Variables,他写道:
您可以创建用于类的类变量,但是有一个问题:该类的每个对象都共享同一个变量,因此如果一个对象更改了一个类变量,那么该变量将针对所有对象进行更改.您可以使用static关键字创建类变量.类变量通常很有用:例如,您可以使用类变量来跟踪程序中创建的特定类的对象数.你会在这个任务中做到这一点.
并说要输入以下代码:
#import <stdio.h>
#import <Foundation/NSObject.h>
@interface TheClass: NSObject
static int count; //error: cannot declare variable inside @interface or @protocol
+(int) getCount;
@end
...
Run Code Online (Sandbox Code Playgroud)
这段代码在Xcode 4中给出了一个错误:
无法在@interface或@protocol中声明变量
这本书错了还是我做错了什么?
我可以创建一个自定义代码段,其中包含在代码中多次替换的参数吗?
我尝试过类似的东西:
<#class#> instanceOf<#class#>;
Run Code Online (Sandbox Code Playgroud)
但是class当我插入代码段并写入第一个参数时,它不会替换两个占位符.
我一直在寻找这个地方,但我找不到任何东西.有谁知道在哪里可以找到有关如何创建Xcode 4插件的文档?
我在同一台机器上安装了Xcode 3.2和Xcode 4.0.2,它使用Hudson进行自动CI(持续集成)构建.当我说两者都已安装时,我的意思是我可以同时或交替使用Xcode 3和Xcode 4.它们都存在于机器上,因为我为Xcode 4进行了自定义安装而没有覆盖Xcode 3(据说).
我的配置文件构建出现了这个错误(调试版本没问题).
{Directory not found for option '-L../../../Mac/Profile/lib [full path of that directory]
Library not found for -lMyLib}
Run Code Online (Sandbox Code Playgroud)
当我检查路径时,目录存在,lib文件libMyLib.a也存在.我的用于Profile构建的库搜索路径包括该目录$(SRCROOT)/../../../ Mac/Profile/lib.我还确保该库是在配置文件设置下构建的.
这只发生在配置文件构建中.
我真的很想得到一些帮助,虽然这可能是一个简单的问题.
谢谢!
编辑:自己找到解决方案 解决问题:在我的链接器路径中,有两个目录条目.第二个被双引号包围,而第一个则没有.Xcode4似乎将它们连接成一个目录条目,显然这是垃圾.删除引号后,链接器错误消失了.
xcode4 ×10
xcode ×7
ios ×3
iphone ×2
xcodebuild ×2
build ×1
debugging ×1
hudson ×1
linker ×1
macos ×1
objective-c ×1
ocunit ×1
plugins ×1
unit-testing ×1
xcode3.2 ×1