------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
OC基础--第一天课程总结:
1. 引入头文件的的方式:
#include <stdio.h> ,include 他是使用预处理器防止重复包含;如果没有写预处理指令,则无法防止重复包含;
#import<Foundation/Foundation>; 使用import 可以防止重复包含;
2. NSlog 和printf函数的区别:
1)NSlog 会自动换行 而printf不会自动换行。
2) NSlog 会自动输出时间等项目信息,printf不会输出自动换行的调试信息,
3) NSlog 函数参数是一个NSString 对象,而printf 是一个字符串常量指针;
3. OC中有自己特有的字符串表示方法
1) 用%@输出字符串,NSString C语言是不支持的。
2) @“” 这个符号表示将C的字符串转化为OC中的字符串对象NSString.
3) @标识符 OC中大部分的关键字都是以@开头的。
4. OC 与C 语言的差异:
1).C语言中,主要有 .c .o .out .h 文件,而OC语言中主要有:.h 头文件 .c C语言源文件 .m OC 语言源文件。
2).OC于C数据类型差异问题:
5. 类的声明和实现:
1)类:一类事物共同特性和行为的抽象;对象:类的具体的个体;
2) 累的定义分为两部分:
(1) 类的声明(规定当前类的:类名、属性、行为),具体格式为:
@interface 类名:父类名
{
// 定义类的属性;
}
// 类的行为
@end
(2 )类的实现(实现具体实现)
@implementation 类名
// 行为的具体实现
@end
代码实现如下:
@interface Car:NSObject
{
//类的属性
int lunzi; //车的轮子
NSString *color;//车的颜色
int speed; //车的速度
}
//类的行为
@end
//类的实现
@implementation Car
//行为的具体描述
@end
6. OC语言中对象的创建 如:
[Car new]; 一共做了三件事;
1)向计算机申请内存空间;
2)给类中的每一个成员初始化值;
3)返回新申请空间的首地址;
4) 格式为: int *p = [ Car new]; 可理解为 定义了一个car类型的指针变量;指针变量指向新申请的内存空间。或者:用 Car类 实例化了一个实例对象,对象的名字是P;
OC基础--第二天课程总结:
1. 对象的存储细节:
1) new的时候,申请的存储空间在内存的堆栈区:
如果实例变量是基本数据类型,此时给初始化为0;
如果实例变量是OC的字符串类型,此时初始化的是NULL;
2)实例变量保存在:堆区; P指针变量保存在栈区;对象方法保存在了代码区;
2. #pragma mark 预处理指令的使用。
功能:简单来说,就是对代码的分组,方便代码的查找和导航;
格式为:#pregma mark +要定位的名称;
3 函数和对象方法的区别。
1) 对象方法的实现只能写在,@implementation ….@end 中;对象方法的声明只能写在@interface.....@end 中间。
2) 对象方法都以-号开头。类方法都以+开头;
3) 对象方法只能由对象来调用,类方法只能由类来调用,不能和函数一样调用。
4)函数声明可以写在main函数内部也可以写在mian函数外部;
5)对象方法归类和对象所有。
4. 常见错误汇总:
1) @interface @end和iplementation @end 不能嵌套包含。
2) 两个类的对象声明顺序(可以把顺序打乱)。
3)成员变量没有写在{}里。
4) 方法声明在了{}里。
5)在声明时不能对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在。
6) 方法无法像函数那样调用。
7)成员变量和方法不能用static 等关键字修饰,不要和c语言混搅。
8)类的实现可以写在函数后面,在使用之前只要声明就可以了。
9) NSlog (@“ %@ ”,exception);可以用@try 方法返回出错内容信息。
5.对象和方法的关系:
1) 对象做为方法的参数传递: 实例代码如下:
#import <Foundation/Foundation.h>
#pragma mark 枪类声明
@interface Gun:NSObject
{
//实例变量
@public
NSString *_size; //枪的型号
int _bulletCount; //枪的子弹数
}
//行为
-(void)shoot;
@end
#pragma mark 枪类实现
@implementation Gun
-(void)shoot{
NSLog(@"%@ 正在 突突的射击...",_size);
}
@end
#pragma mark 士兵类声明
@interface Soldier:NSObject
{
@public
NSString *_name;
int life;
int level;
// Gun *_gun;
}
//行为
//士兵开火
-(void)fireByGun:(Gun *) gun;
@end
#pragma mark 士兵类实现
@implementation Soldier
-(void)fireByGun:(Gun *) gun{
//让枪射击
//gun 不为 null
[gun shoot];
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建一个士兵对象
Soldier *s = [Soldier new];
s->_name = @"三多";
s->life = 98;
s->level = 2;
//创建枪的对象
Gun *gun = [Gun new];
gun->_size = @"小米加步枪";
gun->_bulletCount = 3;
//士兵开枪
[s fireByGun:gun];
[s fireByGun:gun];
[s fireByGun:gun];
}
return 0;
}
2)对象作为方法的返回值:格式为:
—(Person *)dispPerson : (Person *) person;
6.NSString类的介绍:NSString是OC中的核心字符的类之一。字符串创建的方法有:
1)创建常量字符串,注意使用“@”符号:NSString * asstring=@“this is String!”;
2) 创建空字符串 NSString *S1=[NSString new]; S1=@“zifuchuan!”;
3) 第三种方法: NSString*imgName =[NSString stringwithFormat:@“####%02d.jpg”,i];
4) 用一个已经存在的字符串创建一个新的字符串
NSString *s2 =[[NSString alloc] initwithString:S1];
7. 字符串长度计算的方法:
NSString *S1=@“ zhangsanfeng!”;
int len=[S1 length];
注意:在OC语言中,中文汉字仅占一个字节,而在C语言中,占三个字节;这点是不同的。
8.多文件的开发中,通常应包含以下三个文件:
.h 头文件 .m 声明文件 main.m 主函数。
OC基础--第三天课程总结:
1.类方法的概述:
+号表示类方法,就是类调用方法,不依赖对象的方法;
- 号表示是实例(对象)方法,只能是对象可调用,依赖于任何对象的方法
格式为:[类名 方法名];
注意事项:
1) 类方法可以和实例方法同名,这个并不影响使用。
2)类方法可以从父类继承而来,子类可以重写类方法。
3) 类方法和实例方法一样在@interface里声明,在implement里实现。
4) 类方法只能被向类发送类方法消息才被执行,向实例对象发送类方法是不能被触发执行的。
5)类方法里使用了self ,这个self执行的类对象class object而不是实例对象instance object.
2.类方法易犯的错误:
1) 在类的方法中,不能访问实例成员变量;
2)对象方法中可以调用其他的对象方法
1.当前对象方法中创建对象,使用创建的对象调用对象方法
2.可以使用self
3.对象方法可以通过参数传递的对象访问对象方法
3)在类方法中调用其他类方法
1.可以直接使用本类类名(或其他类名)调用方法
2.可以使用self
4)类方法中可以调用对象方法
1.对象作为方法的参数传递过来
2.可以创建一个对象
3.类方法不能调用自身,不然会引起无限循环。
3. 对象方法中可以调用其他的对象方法
1) 当前对象方法中创建对象(可以是当前类的实例对象,也可以是其它类的实例变量),使用新创建的对象调用对象方法
2) 可以使用self
3)对象作为方法的参数传递过来,可以使用传递过来的对象调用方法。
4. 类方法调用其他类方法区别;
1)在类方法中可以调用其他的类方法,
2) 可以直接使用本类类名(或者其他类名)调用类方法(其他类方法)。
3) 可以使用self
4) 类方法不能调用自己,不然会造成死循环;
5.OC类方法应用场景
如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法;
6. 匿名类的概念以及使用;
1) 匿名类可以访问实例变量,但只能访问一次,以后再次访问,实际上访问新的空间了;
2) 使用匿名的类 ,可以调用方法。
[[Car new] stop] 调用stop ,stop是一个方法;
[[Car alloc]init]等价于 [car new];
7. 匿名类作为方法的参数:
[[Person new] gohome :[Car new] ] ;
8.封装实现的步骤:
1) set方法的书写规范;
(1)set方法一定是一个对象方法;
(2) set 方法一定不能有返回值;
(3) set方法必须以set开头;
(4) set之后跟的是实例变量去掉下划线,并且首字母要大写;
(5)set方法一定有参数,而且参数的类型和实例变量的类型一致;
(6)set 方法的形参名一般是去掉下划线的实例变量名;
(7)形参名不能和实例变量名同名;
(8)set方法实现中,一定要用形参给实例变量付值;
2) get 方法(访问器):
(1)作用:
(2)get方法一定是一个对象方法;
(3)get方法一定有返回值,返回值的类型和实例变量的类型要一致;
(4)get 方法的方法是去掉下划线的实例变量名;
(5)get方法一定没有参数;
(6)get 方法实现中,一定是返回值实例变量值;
9.依赖关系:A对象作为B对象的局部变量或者是方法形参,B依赖于A ,我们称为A与B之间存在一种依赖关系;
10: 关联关系:HasA关系,当一个对象拥有另一个对象的时候,当对象B为对象A的成员变量的时候,B对象与A对象存在一种关联关系;
11.方法重载:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。OC中 重载是指参数个数不同,但是返回类型的名字相同。或者是参数个数不同,但其标签不相同。
但是在OC中没有严格的方法重载,方法名不能相同;
12. static 关键字:
1) 变量为静态变量位于程序的全局数据区。
2) 作为全局变量,可将声明放在实现文件的开始部分。
注意:使用static 修饰实例变量是不被允许的,也不能修饰对象方法,但是修饰局部变量是可以的。