图解Windows下开发Objective-C程序之二 - Objective-C入门例子

来源:互联网 发布:数据库更新语句 编辑:程序博客网 时间:2024/06/10 12:40

    安装完环境,完成了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);
    就输出了正确的结果;

0 0
原创粉丝点击