OC基础学习-01

100 阅读5分钟

第一个OC程序

  1. 引入import的原因
    • 为了降低程序员的负担,避免重复导入
  2. printf和NSLog的区别
    • NSLog会自动换行
    • NSLog会在输出内容时附加一些系统信息
    • NSLog和prinf接受的参数不一样,printf接收C字符串,NSLog接收OC字符串
  3. import ""和<>的区别
    • “”:先在当前文件夹中找,再在开发工具中找,再在系统找
    • <>:现在编译环境找,再在系统找

面向对象

  1. 面向对象基本概念
    • 面向对象(OO)时软件开发方式
    • 面向对象时一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段的产物
    • OOP--面向对象编程
  2. 面向对象和面向过程的区别
    • 面向对象时相对面向过程而言
    • 面向对象和面向过程都是一种思想
    • 面向过程
      • 强调的是功能行为
      • 关注的是解决问题需要哪些步骤(亲力亲为)
    • 面向对象
      • 将功能封装进对象,强调具备了功能的对象
      • 关注的是解决问题需要哪些对象
    • eg: 把衣服放进洗衣机
      • 面向过程
        • 打开洗衣机
        • 放进去衣服
        • 关闭洗衣机
      • 面向对象
        • 洗衣机-打开
        • 洗衣机-存储
        • 洗衣机-关闭
  3. 面向对象的特点
    • 的是一种符合人们思考习惯的思想
    • 可以将复杂事情简单化
    • 将程序员从执行者转化成指挥者
    • 完成需求时
      • 先去找具有所需功能呢的对象来用
      • 如果不存在,就创建具备功能的对象
      • 这样简化开发并提高复用

类与对象

  1. 先有类再有对象(修房子时先有图纸再修房子)
  2. 如何设计一个类
    • 生活中面熟事物无非就是面熟事物的名称/属性 和行为
    • 属性:对应类中的成员变量
    • 行为:对应类中的成员方法
    • 定义类其实是在定义类中的成员(成员变量和成员方法)
    • 拥有相同(类似 )属性(状态特征)和行为(能干什么)的对象都可以抽象成一个类
  3. 类的声明:以@interface开头,以@end结束,类名首字母必须大写,类名称后面的NSObject是为了让我的类具备创建对象的能力
@interface Iphone:NSObject
{
        //定义属性
        //默认情况下,OC对象中的属性时不能直接访问的,可以使用@public
       
}
//定义行为
//OC中没有形参不需要写(),直接写一个;
        //OC方法中的()有特殊的用处,要用来括住数据类型
@end
  1. 类的实现:以@implementation开头,以@end结束
@implementation Iphone
{
   //行为的实现
}
@end
  1. 通过类创建对象
    • 在OC中想要通过一个类来创建一个对象,必须给类发送一个消息(在OC中之遥想要发送消息就先协商[类名称/对象名称 方法名称])

    • Iphone *p = [Iphone new]; //通过一个Iphone类型的指针接收类Iphone对象的地址,如果使用给一个指针保存了某一个对象的地址,那么我们就称这个指针为某个类型的对象

    • 只要通过一个类调用类的new方法,也就是给类发送一个叫做new的消息之后,系统内部就会做三件事情

      • 为Iphone类创建出来的对象分配存储空间
      • 初始化Iphone类创建传来的对象的属性
      • 返回Iphone类创建出来的对象对应的地址
    • OC中的类本质是一个结构体,所以指针其实时指向了一个结构体

  2. OC中的方法分为两种,一种是对象方法(-),一种是类方法(+),类方法只能通过类名访问,对象方法只能通过对象调用
  3. OC中的方法如果有参数,那么每个参数的数据类型前面必须加上一个:,其中:也是方法名称的一部分
  4. 为了提高阅读性,OC方法允许我们给每个参数添加一个标签来说明当前参数的含义,便签也是函数名的一部分
- (void)loadData: (int) name andAge: (NSString) content;
  1. 如果不想每次使用方法都需要创建对象来开辟存储空间,并且该方法中没有使用类中的成员变量,就可以定义为类方法,一般用于定义工具方法
  2. 类方法和对象方法的区别
    • 对象方法必须由对象调用,类方法必须用类调用
    • 对象方法能调用成员变量,类方法不能直接访问成员变量
    • 类方法的调用效率会比调用对象方法高
    • 类方法和对象方法可以相互调用
      • 对象方法可以直接调用类方法
      • 可以在类方法中间接调用对象方法(不建议实际使用)
      • 类方法中可以直接调用类方法
      • 对象方法中可以直接调用对象方法(不用先实例化,直接用self)
      • 对象方法使用-开头,类方法使用+开头
  3. 创建创建字符串的方式
    • NSString *str = @"xxx"
    • NSString *str = [NSString stringWithFormat:@]
  4. 结构体赋值
    • stu->birthday = (Date){1996,1,15}
    • stu->birthday.year = 1996
    • Date d= {1996,1,15}; stu->birthday = d;
  5. 对象作为参数其指向的地址和实例化对象指向的地址是一样的
  6. 对象作为返回值,虽然创建的是局部变量,按理函数或方法结束后会自动释放,但是因为是通过new创建的,存在于堆空间,所以不会自动释放
  7. 匿名就是没有名字,匿名对象就是没有名字的对象,简化代码用
    • 有名对象:只要用一个指针保存了某个对象的地址,我们就可以称这个指针为某个对象 Person * p = [Person new],p成为Person对象
    • 没有名字的对象 [Person new] 无论有没有名字,只要调用new方法都会返回对象的地址,每次new都会心开辟一块存储地址,所以这时候访问它的属性没有意义
  8. .m文件和对应的.h文件快速切换:command+control+👆
  9. 匿名对象的使用场景:1.当对象只需要使用一次的时候就可以使用匿名对象;2.匿名对象可以作为方法的实参