做类似的事情有什么不对吗?
NSString * string = [ [ NSString alloc ] init ];
...
[ string release ];
或者在添加时是否有任何价值(除了最佳实践)
string = nil;
?
我觉得这是一个愚蠢的问题,但无论如何我都会问...
我有一组NSDictionary对象,其键/值对对应于我创建的自定义类,调用它MyClass.有一种简单或"最佳实践"的方法让我基本上做MyClass * instance = [地图NSDictionary属性的事情MyClass ];吗?我有一种感觉,我需要做一些事情,NSCoding或者NSKeyedUnarchiver,而不是自己偶然发现,我认为那里的人可能能指出我正确的方向.
出于某种原因,当我尝试执行以下操作时出现编译错误:
NSLog(@"row: %lu", indexPath.row);
Run Code Online (Sandbox Code Playgroud)
哪里row是类型NSUInteger.我得到的错误是
转换指定类型'unsigned long'但参数的类型为'NSUInteger'(又名'unsigned int')
我可以执行以下操作,没有编译错误:
NSString * string = [NSString stringWithFormat:@"row: %lu", indexPath.row];
Run Code Online (Sandbox Code Playgroud)
我使用的是在这两种情况下完全相同的格式字符串和替换参数,但为什么NSLog吓坏了,而-stringWithFormat:似乎是完美的内容?我的编译器是LLVM 1.6.
在设备上运行iPhone应用程序而不是模拟器时,是否可以实际使用Xcode调试器?也就是说,我可以让设备停在我在代码中设置的断点处,并在设备上运行时逐步执行代码吗?
编辑:我应该提一下,我是Apple的注册开发人员并拥有有效证书.事实上,我可以在我的设备上构建和运行iPhone应用程序.但是,即使在调试模式下,当我在设备上运行时,我的应用程序也不会停在断点上或输出到控制台.如果有帮助,当我在模拟器中运行时,我的应用程序将在调试模式下正常运行(例如,在断点处停止).
编辑2:我已经尝试重置我的手机,完全删除并重新安装Xcode,创建一个新项目,更改本页(以及其他人)的答案中提到的所有设置,清理和构建我的项目,构建和调试. ..如果我单击Pause,它会显示"Debugger出错:退出".:(也许我会尝试在另一台计算机上使用Xcode在此设备上进行调试,看看会发生什么.
编辑3:嗯,我尝试在新项目中使用另一台使用Xcode全新安装的计算机,我仍然无法使设备调试工作.我怀疑这是我的iPhone或电缆吗?我想我不是那么无能,以至于我错过了一些如此令人尴尬的事情,但我已经对这里提到的所有建议进行了双重和三重检查.
编辑4:最终让设备调试工作.我有一种感觉,我的设备上的低级别的东西导致了问题...我在我的系统上做了什么.但是,我在另一个系统上安装了Xcode,并且在同一设备(使用相同的电缆)上进行设备调试时运行良好.在此之后,设备调试开始在我原来的机器上运行,让我相信一些奇怪的硬件标志被搞砸了,并且在第二台机器上以某种方式"重置".无论如何,它现在有效...感谢所有的帮助.:)
此外,我不确定是否最好不要回答这个问题或选择最"有帮助"的答案......
这似乎是一个非常愚蠢的问题,但是#import在Objective-C 中包含(实际上,调用)头文件的成本是多少?我厌倦了不断在不同位置包含相同的标题,所以我决定只创建一个GlobalReferences.h包含几个常用标题的文件.
如果不使用其他文件,是否有任何可观的成本包括对其他文件的引用?我的直觉告诉我"不",因为看起来链接器在使用时只是意识到其他文件#import,但我不确定是否需要特别考虑iPhone开发,这是我的项目所关注的.有什么想法吗?
我有个问题关于安全地或适当地转换一个NSString分为不同的类型,例如CGFloat和NSInteger,考虑到这些,苹果创建使用不同的原语取决于某些因素(例如,简单地包装类型NSInteger是typedef"d到int在32位体系结构和long上64位架构).
例如,我知道我可以使用类似的[ someString intValue ]或[ someString longValue ],但我怎么不是说我想someString成为一个NSInteger,让底层的原始的精度由编译器来选择?NSInteger integer = [ someString intValue ]如果someString是从NSInteger64位系统创建的,那么说类似会导致数据丢失,对吧?处理这种情况的最佳方法是什么?
我倾向于在我的类中专门使用属性,特别是现在您可以在类扩展中声明属性,这要归功于现代的Objective-C 2.0运行时 - 我使用此功能来创建"私有"属性.
我的问题是,是否有任何理由再次在类接口中声明ivars.我更喜欢面向公众的界面尽可能地简洁和干净,只是揭示我班级中相关的方面.
例如,我倾向于做以下事情:
MyClass.h:
@interface MyClass : NSObject
@property (nonatomic, copy) NSString * publicString;
@property (nonatomic, copy, readonly) NSString * readOnlyString;
@end
Run Code Online (Sandbox Code Playgroud)
MyClass.m:
@interface MyClass ()
@property (nonatomic, copy, readwrite) NSString * readOnlyString;
@property (nonatomic, copy) NSString * privateString;
@end
@implementation MyClass
@synthesize publicString = publicString_;
@synthesize readOnlyString = readOnlyString_;
@synthesize privateString = privateString_;
- (void)init
{
self = [super init];
if (self != nil)
{
self.publicString = @"Public String";
self.readOnlyString = @"Read-Only String";
self.privateString …Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,但是有可能在一个UIBarButtonItem由多个视图管理的情况下保持正确UINavigationController吗?我有一个经常共享相同权利的视图UIBarButtonItem,但是当我将新视图推送到我的视图时UINavigationController,我必须每次都重新定义按钮,即使它没有改变.大多数情况下,从一个视图到下一个视图的明显过渡动画是困扰我的原因,因为完全相同的按钮会暂时淡出然后重新进入,这是不必要的,因为没有实际的视觉变化.我应该考虑只添加一个UIButton作为我的子视图UINavigationBar并以这种方式完成"右键按钮"效果吗?
我一直有一些问题,调用-becomeFirstResponder一个UITextField以模态方式呈现的视图控制器的包含.我在模态视图控制器的-viewDidLoad方法中调用此方法,以便立即显示键盘.我期望键盘和模态视图控制器同时从屏幕底部向上动画.但是,我正在观察的是以下内容:
-presentModalViewController:animated:父视图控制器上调用方法的按钮与子视图控制器开始以模态方式动画之间存在约0.2秒的UI延迟.就像键盘的动画和模态视图控制器的动画同时竞争某些较低级别的Core Animation资源一样,但我不明白为什么会发生这种情况.如果我不要求UITextField成为第一个响应者(即,如果我不要求键盘呈现自己),那么似乎进一步证实了这种预感,那么绝对没有UI延迟,并且模态视图控制器动画即刻.
有趣的是,如果我做类似的事情[self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001];,键盘的动画几乎与模态视图控制器的动画同时发生 - 很难说它们在iPhone上运行时不会同时被动画化模拟器.但是,当在实际设备上运行时,很容易注意到键盘在出现模态视图控制器之后才会出现.但重要的是,没有更多的UI延迟.
有没有人经历过类似的事情?
objective-c ×7
iphone ×4
64-bit ×1
breakpoints ×1
cocoa ×1
collections ×1
debugging ×1
dependencies ×1
gdb ×1
header ×1
header-files ×1
import ×1
keyboard ×1
llvm ×1
modal-dialog ×1
nsdictionary ×1
nsstring ×1
null ×1
properties ×1
types ×1
uibutton ×1