安装完环境,完成了Hello World例子之后,来看一些实例。
一 输出语句的例子
敲入如下语句,
#import <Foundation/Foundation.h>
int main (int argc, const char *argv[])
{
NSLog (@"%d and %d and %@",100, 100, "qbs");
NSLog (@"%d and %d and %@",25, 75, "begz");
return 0;
}
然后运行,出错了;如下图;
原因是字符串前面要加@,@"字符串",和标准C略有差别;加上@后就正确了,如下图;
下图的工具栏中,小齿轮是build,绿色三角是Run,再后面是Build and Run,右边的红色三角是Debug;每次保存文件后应Build再Run,或点Build and Run;如果直接Run,运行的是上一次Build的结果;
二 布尔类型变量的例子
代码如下;
#import <Foundation/Foundation.h>
BOOL areIntsDiff (int t1, int t2)
{
if (t1 == t2) {
return (NO);
} else {
return (YES);
}
}
NSString *boolString (BOOL yesNo)
{
if (yesNo == NO) {
return (@"NO");
} else {
return (@"YES");
}
}
int main (int argc, const char *argv[])
{
BOOL areDiff;
areDiff = areIntsDiff (100, 100);
NSLog (@"are %d and %d different? %@",
100, 100, boolString(areDiff));
areDiff = areIntsDiff (25, 75);
NSLog (@"are %d and %d different? %@",
25, 75, boolString(areDiff));
return (0);
} // main
第一个函数比较两个整数是否相等;第二个函数根据传入的是OC的YES还是NO,返回字符串的"YES"或"NO";
BOOL类型定义在Objective-C中用来持有一个布尔值,定义为YES和NO; 而非TRUE和FALSE;
运行结果如下;
三 循环语句
代码如下;
#import <Foundation/Foundation.h>
int main (int argc, const char *argv[])
{
NSLog (@"The numbers from 1 to 6:");
int i;
for (i = 1; i <= 6; i++) {
NSLog (@"%d\n", i);
}
return (0);
} // main
循环语句跟标准C差不多;运行结果如下图;
四 做一个九九乘法表
在标准C的典型例子中,有一个输出九九乘法表的例子;编写如下代码;
int main (int argc, const char *argv[])
{
NSLog (@"Nine Nine Multiplication table:");
int x,y,z;
for(x=1;x<=9;x++)
{
for(y=1;y<=x;y++)
{
z=x*y;
NSLog (@"%d*%d=%d ",y,x,z);
}
NSLog (@"\n");
}
return (0);
}
运行,输出结果都正确,但是没有像标准C的例子一样整个乘法表排成三角形;如下图;
原来NSLog每次输出自动换到下一行,NSLog默认输出是带时间、进程名、换行等其他额外信息的;要不换行需要自己实现一个Log函数。
五 操作一下字符串
代码如下;
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
const char *words[4] = { "乔布斯", "比尔盖兹",
"克林顿", "小布什" };
int wordCount = 4;
int i;
for (i = 0; i < wordCount; i++) {
NSLog (@"%s is %d characters long",
words[i], strlen(words[i]));
}
return (0);
}
定义一个包含四个字符串的数组;运行,结果如下图;
六 Objective-C的类的初步实现
代码如下;
#import <Foundation/Foundation.h>
@interface student :NSObject
{
@public int grade;
NSString *name;
}
-(void)print;
-(void) setName:(NSString *)nn;
@end
@implementation student
-(void)print
{
NSLog(@"我叫 %@ ,我 %d 年纪了",name,grade);
}
-(void) setName:(NSString *)n
{
name=n;
}
@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
student *student1 = [student new];
student1->grade=5;
[student1 setName:@"乔布斯"];
[student1 print];
[pool drain];
return 0;
}
定义一个类student,并实现它的两个函数print和setName;
OC下类的创建分为两个部分,一个是类的声明(@interface),一个是类的实现(@implementation);
name是一个对象,如果在NSLog中输出控制符写为输出字符串的%s,
NSLog(@"我叫 %s ,我 %d 年纪了",name,grade);
出现下图的错误,名字没有正确显示;
改为如下;
NSLog(@"我叫 %@ ,我 %d 年纪了",name,grade);
就输出了正确的结果;