第一个OC程序
- 引入import的原因
- 为了降低程序员的负担,避免重复导入
- printf和NSLog的区别
- NSLog会自动换行
- NSLog会在输出内容时附加一些系统信息
- NSLog和prinf接受的参数不一样,printf接收C字符串,NSLog接收OC字符串
- import ""和<>的区别
- “”:先在当前文件夹中找,再在开发工具中找,再在系统找
- <>:现在编译环境找,再在系统找
面向对象
- 面向对象基本概念
- 面向对象(OO)时软件开发方式
- 面向对象时一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段的产物
- OOP--面向对象编程
- 面向对象和面向过程的区别
- 面向对象时相对面向过程而言
- 面向对象和面向过程都是一种思想
- 面向过程
- 强调的是功能行为
- 关注的是解决问题需要哪些步骤(亲力亲为)
- 面向对象
- 将功能封装进对象,强调具备了功能的对象
- 关注的是解决问题需要哪些对象
- eg: 把衣服放进洗衣机
- 面向过程
- 打开洗衣机
- 放进去衣服
- 关闭洗衣机
- 面向对象
- 洗衣机-打开
- 洗衣机-存储
- 洗衣机-关闭
- 面向过程
- 面向对象的特点
- 的是一种符合人们思考习惯的思想
- 可以将复杂事情简单化
- 将程序员从执行者转化成指挥者
- 完成需求时
- 先去找具有所需功能呢的对象来用
- 如果不存在,就创建具备功能的对象
- 这样简化开发并提高复用
类与对象
- 先有类再有对象(修房子时先有图纸再修房子)
- 如何设计一个类
- 生活中面熟事物无非就是面熟事物的名称/属性 和行为
- 属性:对应类中的成员变量
- 行为:对应类中的成员方法
- 定义类其实是在定义类中的成员(成员变量和成员方法)
- 拥有相同(类似 )属性(状态特征)和行为(能干什么)的对象都可以抽象成一个类
- 类的声明:以@interface开头,以@end结束,类名首字母必须大写,类名称后面的NSObject是为了让我的类具备创建对象的能力
@interface Iphone:NSObject
{
//定义属性
//默认情况下,OC对象中的属性时不能直接访问的,可以使用@public
}
//定义行为
//OC中没有形参不需要写(),直接写一个;
//OC方法中的()有特殊的用处,要用来括住数据类型
@end
- 类的实现:以@implementation开头,以@end结束
@implementation Iphone
{
//行为的实现
}
@end
- 通过类创建对象
-
在OC中想要通过一个类来创建一个对象,必须给类发送一个消息(在OC中之遥想要发送消息就先协商[类名称/对象名称 方法名称])
-
Iphone *p = [Iphone new]; //通过一个Iphone类型的指针接收类Iphone对象的地址,如果使用给一个指针保存了某一个对象的地址,那么我们就称这个指针为某个类型的对象
-
只要通过一个类调用类的new方法,也就是给类发送一个叫做new的消息之后,系统内部就会做三件事情
- 为Iphone类创建出来的对象分配存储空间
- 初始化Iphone类创建传来的对象的属性
- 返回Iphone类创建出来的对象对应的地址
-
OC中的类本质是一个结构体,所以指针其实时指向了一个结构体
-
- OC中的方法分为两种,一种是对象方法(-),一种是类方法(+),类方法只能通过类名访问,对象方法只能通过对象调用
- OC中的方法如果有参数,那么每个参数的数据类型前面必须加上一个:,其中:也是方法名称的一部分
- 为了提高阅读性,OC方法允许我们给每个参数添加一个标签来说明当前参数的含义,便签也是函数名的一部分
- (void)loadData: (int) name andAge: (NSString) content;
- 如果不想每次使用方法都需要创建对象来开辟存储空间,并且该方法中没有使用类中的成员变量,就可以定义为类方法,一般用于定义工具方法
- 类方法和对象方法的区别
- 对象方法必须由对象调用,类方法必须用类调用
- 对象方法能调用成员变量,类方法不能直接访问成员变量
- 类方法的调用效率会比调用对象方法高
- 类方法和对象方法可以相互调用
- 对象方法可以直接调用类方法
- 可以在类方法中间接调用对象方法(不建议实际使用)
- 类方法中可以直接调用类方法
- 对象方法中可以直接调用对象方法(不用先实例化,直接用self)
- 对象方法使用-开头,类方法使用+开头
- 创建创建字符串的方式
- NSString *str = @"xxx"
- NSString *str = [NSString stringWithFormat:@]
- 结构体赋值
- stu->birthday = (Date){1996,1,15}
- stu->birthday.year = 1996
- Date d= {1996,1,15}; stu->birthday = d;
- 对象作为参数其指向的地址和实例化对象指向的地址是一样的
- 对象作为返回值,虽然创建的是局部变量,按理函数或方法结束后会自动释放,但是因为是通过new创建的,存在于堆空间,所以不会自动释放
- 匿名就是没有名字,匿名对象就是没有名字的对象,简化代码用
- 有名对象:只要用一个指针保存了某个对象的地址,我们就可以称这个指针为某个对象 Person * p = [Person new],p成为Person对象
- 没有名字的对象 [Person new] 无论有没有名字,只要调用new方法都会返回对象的地址,每次new都会心开辟一块存储地址,所以这时候访问它的属性没有意义
- .m文件和对应的.h文件快速切换:command+control+👆
- 匿名对象的使用场景:1.当对象只需要使用一次的时候就可以使用匿名对象;2.匿名对象可以作为方法的实参