iOS开发系列—Objective-C之基础概览

概览

前面咱们已经用了几章内容进行C语言介绍,固然要经过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操做、内存申请等咱们都没有重点介绍,固然核心知识点基本都已经提到了,后面有时间咱们会继续扩充。今天咱们正式开始学习Objective-C,之后简称“ObjC”,ObjC是在C语言的基础上加上了一层面向对象的特性,它彻底兼容C语言,甚至能够混写C++。它是Mac OS X和IOS的主要开发语言,从IOS发布以后能够说ObjC的地位呈直线上升趋势,当前ObjC已是仅次于C语言、Java的第三大编程语言。今天咱们先简单的看一下C语言的一些基础内容:编程

  1. 第一个ObjC程序
  2. 基本数据类型

第一个ObjC程序

打开Xcode,建立一个新项目框架

Xcode

选择命令行程序编程语言

CommandLine

选择程序语言为Ojbective-C并输入项目名称函数

ProjectName

选择保存目录学习

SelectFolder

默认生成一个基本的项目结构ui

Program

程序源代码spa

//
//  main.m
//  Basics
//
//  Created by Kenshin Cui on 14-2-1.
//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

上面是经过Xcode建立的第一个ObjC程序,这是一个经典的“Hello,World!”。运行结果以下:操作系统

RunResult

下面对上面的代码作一下简单解释:命令行

  1. 首先#import是一个导入命令,相似于C语言的#include命令,可是相对于#include而言,#import有效的处理了重复导入的问题,在C语言中也提到过如何经过条件编译解决重复导入,而在ObjC中你不须要处理了,#import已经自动进行了重复处理;与#include相似,导入系统类库使用<>,导入自定义类库使用””;
  2. Foundation.h是Foundation框架中的头文件,这是ObjC中的一个基础类库,基本上后面咱们用到的全部ObjC的代码都须要引入这个类库;
  3. @autoreleasepool是ObjC的关键字,它的做用是对包含在这个关键字后面大包括内的程序会自动进行内存回收,不须要开发人员手动释放无用的对象;固然表面上看起来这有点相似于C#和Java的内存垃圾回收机制,可是事实上他们的原理彻底不一样,之后再作具体解释。
  4. NSLog是标准输出函数,相似于C语言中的printf()函数,可是它会自动换行,固然它一样支持格式输出(例如%i表示输出整形数据,%f输出浮点型数据),这个函数在Fundation.h中声明;
  5. @”Hello,World!”,是一个字符串常量,在ObjC中字符串前须要使用@符号;

 

扩展--OjbC语法特色

  • ObjC中没有命名空间(C#)或包(Java)的概念,那也就是说在同一个应用中不能同时存在两个彻底相同的类名,一般状况下咱们经过前缀加以区分,例如在ObjC中的NSString、NSLog中的NS就是前缀。

NS实际上是NeXTSTEP缩写,是乔布斯离开苹果后在NeXT公司所开发的系统,这个操做系统在当时虽然没有得到普遍认同,可是却为后面Mac OX奠基了基础。3d

  • ObjC中不少关键字都是以@开头(例如@autoreleasepool、@interface、@protocol),另外须要注意的是为了区分C语言中的字符串,ObjC中的字符串也必须加上@。

基本数据类型

在ObjC中的基本数据类型除了C语言中的char、int、float、double以外还有:

  1. BOOL类型,包含两个值YES和NO,其实ObjC中的布尔类型就是整数1和0;
  2. id类型,是一个对象类型,能够表示全部对象;
  3. NSString是Fundation框架中定义的字符串类型;
//
//  main.m
//  Basics
//
//  Created by Kenshin Cui on 14-2-1.
//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        char a='a';
        int b=1;
        float c=8.5;
        double d=8.5e+12;
        char e='a';
        BOOL f=YES,g=NO;
        NSLog(@"a=%c,b=%i,c=%f,d=%f,e=%c,f=%i,g=%i",a,b,c,d,e,f,g);
        //结果:a=a,b=1,c=8.500000,d=8500000000000.000000,e=a,f=1,g=0
        
        NSString *str=@"Hello,World!";
        NSLog(@"str=%@",str); //结果:str=Hello,World!
        
        NSLog(@"object=%p",nil);//结果:object=0x0
    }
    return 0;
}

关于上面id类型在这里不作过多的解释,后面咱们会专门说到,下面列出经常使用格式符:

格式化输出

 

注意

1.在C或者ObjC中整形可使用%i也可使用%d来格式化,只有使用scanf()输入的时候两者才有区别(因为%d始终被编译器解释为decimal intergeer因此即便输入010会被认为是整形10,而%i则会将前面的0或者0x认为此输入是八进制或十六进制整数);

2.%p本质就是输出指针地址,在32位编译器下对于一个指针类型使用%x输出和%p输出实际上是同样的,只是后者会在前面加上“ox”(注意在64位编译器下因为指针长度8byte,而整形只有4byte因此%x输出的内容只是%p的低位数据);

相关文章
相关标签/搜索