一,import和include的区别;(一般面试容易问)
1.import向下兼容include
2.import可以防止头文件的重复包含,include不能防止头文件重复包含.
二,简单的NSLog 和printf的区别:
1,NSLog可以自动换行, 输出调试信息, printf不能.
2,NSLog 函数的参数是一个NSString 对象
3,printf函数的参数是一个字符串常量指针
三,@符号的含义:
1,@“” 将双引号的C字符串转换为OC的字符串对象NString;
2,OC中的一个特有标示符,很多关键字前面都加@。
四,OC可以访问C源文件中的函数。C不能方位OC中的源文件中的方法。(这里其实是向下兼容)
五.语言特点
源文件对比:
1,C中常见的源文件有.c 和 .h ;
2,OC中常见的源文件有.h 和 .m ;
基本语法对比:
1,数据类型对比:
首先OC兼容C中的所有数据类型;
OC新增了boolean类型、block类型、对象类型、特殊类型SEL和nil 等;
另外,C中不兼容OC中新增的类型;
2,流程控制语句对比;
首先OC兼容了C中所有的流程控制语句;
OC又新增了自己的for in 增强型的循环语句;
//OC中的增强型for循环
for(NSString *str in arr){
NSLog(@"%@",str);
}
在后面UI进阶的时候会用到懒加载,for(NSDictionary *dict in tempArray)
3,函数和方法定义声明的对比;
C语言中函数的声明和实现
i.函数声明:
int sum(int a,int b);
ii.函数定义
int sum(int a,int b){
return a+b;
}
OC语言中函数习惯称之为“方法”
i.方法声明:
-(int)sum:(int) a and:(int) b;
ii.方法定义
-(int)sum:(int) a and:(int )b{
return a+b;
}
六.类和对象
什么是类?
通俗一点讲就是 将具有相同属性和行为的实体的向上抽象。
比如:将男人,女人,向上抽象为一类,即为 人;Person类;
将狗,猫,老虎等动物向上抽象为一类,即为动物的类;Animal类等;
什么是对象?
即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。
类和对象的抽象关系:
类和对象时分不开的;
每个对象,一定有自己所属的类;
每个类,一定有自己对应的实例;
类由对象的抽象而来;
对象由类的具体实例而来;
七.类的成员组成及访问
组成:
成员变量(属性)
成员方法(行为)
类的申明与实现:
成员访问:
前提:成员变量需要用@public修饰符修饰;
Car *car1=[Car new];
car1->lunzi = 3; // 使用->来访问;
在前期学习的时候需要知道这些基础的实现方法,但使用箭头来访问的方式存在很大的安全问题后面会用一另外的方法来代替。
方法访问:
Car *car = [Car new];
[car run];
另外需要知道一些关于4种方法,类似于4种函数。(有参无返回值等等)
下面的小程序可以更加深入的了解:
#import <Foundation/Foundation.h>
@interface Caculator : NSObject
{
// 成员属性
@public
int num1; // 默认初始化为0
int num2;
}
// 方法声明
-(void)test1;
-(int)test2;
-(int)tetst3:(int)x andY:(int)y; // 方法名: test3: andY:
-(int)test4:(int)x;
@end
@implementation Caculator
// 方法的实现
-(void)test1
{
NSLog(@"这是一个无参数,无返回值的方法");
}
-(int)test2
{
NSLog(@"这是一个无参数,有返回值的方法");
return num1;
}
-(int)tetst3:(int)x andY:(int)y // 方法名: test3: andY:
{
NSLog(@"这是一个有两个参数,没有返回值");
return x + y;
}
-(int)test4:(int) x
{
NSLog(@"这是一个有一个参数,有返回值");
return x;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Caculator *cal = [Caculator new];
[cal test1];
int a = [cal test2];
NSLog(@"a = %d",a);
int b = [cal tetst3:10 andY:20];
NSLog(@"b = %d",b);
int c = [cal test4:40];
NSLog(@"c = %d",c);
}
return 0;
}
八:类方法与对象方法
一般在程序没有必要进行实例化的时候就用类方法,因为在进行对象方法使用的时候会申请内存空间,类方法的效率会比较高。