printf和NSlog区别
NSLog会自动加上换行符,不需要自己添加换行符,NSLog会加上时间和进程信息,而printf仅将输入的内容输出不会添加任何额外的东西。两者的输入类型也是有区别的NSLog期待NSString*,而printf期待const char *。最本质的区别在于NSLog输出的日志,在debug下面,NSLog的输出会被写到system.log,而printf是不具备日志属性的。
NSLog的定义
NSLog定义在NSObjCRuntime.h中,如下所示:
void NSLog(NSString *format, …);
基本上,NSLog很像printf,同样会在console中输出显示结果。不同的是,传递进去的格式化字符是NSString的对象,而不是char *这种字符串指针。
NSLog (@"this is a test");
NSLog (@"string is :%@", string);
NSLog (@"x=%d, y=%d", 10, 20);
但是下面的写法是不行的:
int i = 12345;
NSLog( @"%@", i );
原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:
int i = 12345;
NSLog( @"%d", i );
%@ 对象
%d, %i 整数%u 无符整形%f 浮点/双字%x, %X 二进制整数%o 八进制整数%zu size_t%p 指针%e 浮点/双字 (科学计算)%g 浮点/双字 %s C 字符串%.*s Pascal字符串%c 字符%C unichar%lld 64位长整数(long long)%llu 无符64位长整数%Lf 64位双字
声明以常见的先行短线和位于圆括号中的返回类型开头:
-(void)
参数类型在圆括号中指定,:号是方法名称最重要的组成部分。
如果方法使用参数就需要冒号,否则不需。
就Objective-C语言而言,创建一个类非常简单。它非常典型的分成了两个部分。
类的接口通常保存在ClassName.h文件里,它定义了实例的参数,以及一些公开的方法。
类的实现在ClassName.m文件里。它包含了真正运行的代码和那些方法。它还经常定义一些私有的方法。这些私有的方法对于子类是不可见的。
这里有一个接口文件的大概。类名Photo,所以文件名叫Photo.h:
#div_code img { border: 0px none; }
#import
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
@end
首先,我们把Cocoa.h import进来。Cocoa的应用程序的所有的基本的类大多都是这样做的。#import宏指令会自动的避免把同一个文件包含多次。
@interface符号表明这是Photo类的声明。冒号指定了父类。上面这个例子父类就是NSObject。
在大括弧里面,有两个变量:caption和photographer。两个都是NSString类型的。当然了,他们也可以是任何别的类型包括id类型的。
最后@end结束整个声明。