下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >移动开发 >移动开发之基础知识篇

移动开发之基础知识篇

我爱的人啊~发布于 2015-07-06 16:45查看:1019回复:9

前言

这里我按照我的思路只是对java和Object-c区别有明显的地方做个总结,如果要学习这门语言建议还是找来一本书看看细节知识点,限于篇幅,这里讲解不全面,大都点到为止。如有错误的地方,欢迎批评指正,一起学习。大伙学过编程都知道,计算机语言的第一门课,都会讲如何敲出“Hello World!”这样一个程序,今天也从这里开始,先看两块代码:

Java:
class HelloWorld {
  //主函数入口
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
Object-c:
#import 
//主函数入口
int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSLog(@"Hello World!");
    }
    return 0;
}

运行上面两段代码都可以在控制台打印出“Hello World!”,从这个Demo里面我们开始引出下面几点内容:

  1. 常见文件扩展名:

后缀扩展名意义
.javajava代码源文件
.classjavas源代码编译后的与平台无关的字节码文件
.cC语言代码源文件
.cc、.cppC++语言代码源文件
.h头文件
.mObject-c语言代码源文件
.mmObject-c++语言代码源文件
.o、.outC、C++、Object-c语言编译后生产的文件
  1. 程序入口:
    java和objec-c都用main函数作为程序的入口。

  2. 注意返回值

  3. 注意打印语句:当然object-c也可以用C语言中的printf语句来打印。这里的NsLog是Cocoa框架中提供的Foundation框架。

  4. object-c指针变量的概念。

  5. java采用垃圾回收机制,由java虚拟机负责对象内存回收工作。而Object-c没有这样的机制,这里是引入自动释放池(@autoreleasepool),该池会自动回收这些语句创建的对象,释放内存,避免内存泄露。这也是MRC(手动引用计数)中的一种。相对于Object-c2.0引入的ARC(自动引用计数),这个要在内存管理上相对难一点。这也是java程序员学习这块知识的一个难点。

  6. NSLog函数中NS是一个前缀,用来标识这个函数来自Cocoa,而不是其他程序包,而Java用包名来区分这些。

  7. Java字符串只需要用双引号””引起来就可以,而Object-c则需要在此基础上加上@符号,来表示它是一个字符串。

  8. Java编译后会生成相对应的.class文件,而Objec-c编译后会生成对应的.out文件。

  9. Java和object-c注释:单行注释用//...  多行注释用/*...*/

数据类型

  1. 关于两者分隔符、标识符两者并无太大区别,而关键字大体相同,但有个别差别,这里不再
    多说,有兴趣的可以查资料。

  2. Object-c是C语言的超集,所以它支持的类型与C基本相似:这里不再多说,下面先列出基本数据类型:

Objec-c

类型说明
short int简称short
int整型
long int简称long
long long更长整型
char字符型
float浮动型
double浮点型
enum枚举
BOOL布尔类型:YES对应1,NO对应0
NSIntegerlong
NSUIntegerunsigned long
CGFloat64位平台相当于double,32位平台相当于float
  1. 在Object-c中定义类型为了平台兼容性,我们建议都用NSInteger、NSUInteger、CGFloat来代替整型和浮点型,很重要一点就是他们都是基本类型。

  2. 包装类:

    • NSValue:通用的包装类,包装short、int、long、float、char、指针、对象id等

    • NSNumber:继承于NSValue,包装short、int、long、float、char、指针

  3. 类型转换:

  • 基本类型之间的转换:

    • 自动类型转型

    • 强制类型转换(用圆括号)

    • 向上转型,也就是类型提升

  • 基本类型与包装类型之间转换:

    • + numberWithXxx:将特定类型值包装为NSNumber;

    • - initWithXxx:先创建一个NSNumber对象,再用基本类型初始化NSNumber;

    • - xxxValue:返回该NSNumber对象包装的基本类型的值;

Java:

类型说明包装类
byte字节类型Byte
short短整型Short
int整型Integer
long长整型Long
char字符型Char
float浮动型Float
double浮点型Double
boolean布尔类型:true , falseBoolean
  1. 包装类:如上表

  2. 类型转换

  • 基本类型之间的转换:

    • 自动类型转型

    • 强制类型转换(用圆括号)

    • 向上转型,也就是类型提升

  • 基本类型与包装类型之间转换(拆箱与装箱机制):

    • new WrapperClass(primitive):创建对应包装类;

    • WrapperClass.xxxValue():返回对应基本数据类型;

运算符

  • 算术运算符:+(加)、-(减)、* (乘) 、 /(除) 、%(取余)、++(自加)、—(自减)

  • 赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=(仅Java支持)

  • 位运算符:&(按位与)、|(按位或)、~(按位非)、^(按位异或)、<<(左移)、>>(右移)、  >>>(无符号右移,仅Java支持)

  • 比较运算符:>、<、>=、<=、==、!=

  • 逻辑运算符:&&(与)、||(或)、!(非)、^(异或)

  • 三目运算符:(?:)
    这里不过多解释,大伙自行脑补,然后就是注意一下运算符的优先级,是在拿不准就用括号括起来。

流程控制

  • 顺序结构

    • if条件语句

    • switch分支语句

  • 循环结构

    • while循环语句

    • do while循环语句

    • for循环

    • foreach循环(注意Java和Object-c表现不一样,下面遍历数组提到)

    • 控制循环语句:break、continue、return、(goto不再提及,少用)

  • 这里相信大伙都没问题,只强调一点就是代码规范。

数组

Object-c直接使用了C语言的数组,和Java相比定义:

Object-c定义以及初始化:

type arrayName[length] = {ele1,ele2,……eleN};

Java定义及初始化:

  • 静态初始化:type[] arrayName = new type[]{ele1,ele2,……eleN}
    或者type[] arrayName = {ele1,ele2,……eleN}

  • 动态初始化:type[] arrayName = new type[length]
    Java建议使用这种方式定义
    另外还有一种是和上面Object-c一样,但是规范起见不建议使用

  • 用foreach遍历数组

    Java版

    for(type varName:arrayName){
    }

    Object-c版

    for(type varName in arrayName){
    }

多维数组不再多说,自行脑补


C语言基础知识补充

函数

  • C、Java和Object-c的入口函数都是main函数

  • 函数参数传递机制都是值传递,这点大伙可以延伸一下,书本上常引用的例子就是变量之间的值交换。

  • 内部函数:定义时用static修饰,该函数只能被当前源文件中其他的其他函数所调用。

  • 外部函数:定义时用extern修饰,或不使用任何修饰符修饰,可以被任何源文件中的函数调用。

  • 局部变量和全局变量的作用域。

  • 内部全局变量和外部全局变量定义:static修饰,区别就是是否可以被其他源程序文件访问。

  • 动态存储和静态存储

预处理

编译器执行之前,先对预处理命令进行处理,然后再和源程序一起编译。

  • 预处理命令必须以#开头

  • 预处理命令通常位于文件开头部分。

  • 宏定义:#define 宏名称 字符串 ,如这条语句:
    #define PI 3.1415926

    • 宏名称字母大写,它不是变量,也不是常量,编译器处理只需查找和替换为定义的字符串即可。

  • 带参数的宏定义:#define 宏名称(参数列表) 字符串,如这条语句:
    #define AREA(r) PI * r * r;

  • 条件编译第一条指令:#ifdef、#ifndef、#else、#endif,定义如下:

    #ifdef 宏名称
        //执行任意语句
    #endif

    如果定义了指定的宏,则执行#ifdef和#endif之间的语句。

    #ifdef 宏名称
        //任意语句
    #else
        //任意语句
    #endif

    如果定义了指定的宏,则执行#ifdef和#else之间的语句;否则执行#else和#endif之间的语句。

    #ifndef 宏名称
        //任意语句
    #endif

    如果没有定义指定的宏,则执行#ifndef和#endif之间的语句。

    #ifndef 宏名称
        //任意语句
    #else
        //任意语句
    #endif

    如果没有定义指定的宏,则执行#ifndef和#else之间的语句;否则执行#else和#endif之间的语句。

  • 条件编译第二条指令:#if、#elif、#else、#endif

    #if 表达式
      //任意语句
    #elif 表达式
      //任意语句
    ……
    #else
      //任意语句
    #endif

    和分支语句比较像

  • #include#import:两者都可以导入源程序,但前者会有重复导入问题,所以Object-c中我们建议和Java一样使用#import。


收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

共有9条评论

  • 慧星的那一夜
  • MK
  • 药师
  • IT宅男
  • mr jack
  • YUI
  • Mr ken
  • cappuccino
  • 课课家技术团队1
  • 选择版块:

  • 标题:

  • 内容

  • 验证码:

  • 标题:

  • 内容

  • 选择版块:

移动帖子x

移动到: