我正在做一个关于在Xcode中调试的演示文稿,并希望获得有关使用NSLog的更多信息.
特别是,我有两个问题:
是否有一种方法可以在我的自定义类中覆盖,以便何时
NSLog(@"%@", myObject)
Run Code Online (Sandbox Code Playgroud)
被称为,它将打印我的对象的字段(或任何我认为重要的)?我想我正在寻找Java的Objective-C等价物toString()
.
我在这个网站上被告知了几次,但我想确保确实如此.
我希望能够在我的代码中撒上NSLog函数调用,并且Xcode/gcc会在构建我的Release/Distribution版本时自动删除这些调用.
我应该避免使用它吗?如果是这样,有经验的Objective-C程序员之间最常见的选择是什么?
A NSInteger
在32位平台上为32位,在64位平台上为64位.是否有一个NSLog
总是匹配大小的说明符NSInteger
?
建立
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
打开这让我有些悲伤:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于32位代码,我需要说明%d
符.但是,如果我使用说明%d
符,我在编译64位时会收到警告,建议我使用%ld
.
如果我使用%ld
匹配64位大小,编译32位代码时,我会收到警告,建议我使用%d
.
如何一次修复这两个警告?是否有我可以使用的说明符?
这也影响[NSString stringWithFormat:]
和[[NSString alloc] initWithFormat:]
.
我正在覆盖对象的描述方法.我需要知道如何打印对象的内存地址来替换下面代码中的{???}:
-(NSString *) description {
return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@",
{???}, self.parameterOne, self.paramterTwo];
}
Run Code Online (Sandbox Code Playgroud)
我希望它在控制台中打印如下:
<SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages
Run Code Online (Sandbox Code Playgroud) 自升级到最新的Xcode 3.2.1和Snow Leopard以来,我一直在收到警告
"格式不是字符串文字,没有格式参数"
来自以下代码:
NSError *error = nil;
if (![self.managedObjectContext save:&error])
{
NSLog([NSString stringWithFormat:@"%@ %@, %@",
errorMsgFormat,
error,
[error userInfo]]);
}
Run Code Online (Sandbox Code Playgroud)
如果errorMsgFormat
是NSString
格式说明符(例如"print me like this: %@"
:),上面的NSLog
调用有什么问题?什么是修复它的建议方法,以便不生成警告?
我有一个CGPoint称为点被分配触摸:
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
Run Code Online (Sandbox Code Playgroud)
我想将x坐标值放入我的控制台日志中:
NSLog(@"x: %s", point.x);
Run Code Online (Sandbox Code Playgroud)
当我使用它时,日志输出为:
x :( null)
我已经验证,使用调试器和变量监视调用此点时,该值不为null.
任何帮助,赞赏,
谢谢 // :)
NSLog
Xcode 8.0 beta(8S128d)上没有打印任何内容.printf
没有改变
这是我的代码:
NSLog(@"hello from NSLog");
printf("hello from printf");
Run Code Online (Sandbox Code Playgroud)
这是iOS 9模拟器上的输出:
2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf
Run Code Online (Sandbox Code Playgroud)
这是iOS 10 Simulator上的输出:
hello from printf
Run Code Online (Sandbox Code Playgroud) 我需要使用类似NSLog
但没有时间戳和换行符的东西,所以我正在使用printf
.我怎么用这个NSString
?
nslog ×10
objective-c ×7
cocoa ×3
cocoa-touch ×3
iphone ×3
ios ×2
xcode ×2
32bit-64bit ×1
ios10 ×1
nsinteger ×1
nsstring ×1
printf ×1
tostring ×1
warnings ×1
xcode8 ×1