美文网首页
objective-c学习

objective-c学习

作者: 没头脑和挺高兴 | 来源:发表于2019-02-22 11:19 被阅读0次
  • 参考

  • 启程

    • Xcode
  • 对C的扩展

    • 最简单的Oc程序
      • main.m
      • m=message
    • 解构Hello world
      • import

      • 框架
      • NSLog()和@
    • 布尔类型
  • 面向对象编程的基础知识

    • 间接??

      • 变量和间接
      • 使用文件名的间接
    • 在面向对象编程中使用间接

      • 过程式编程
        • enum 不需要类型
        • struct 需要类型
      • 实现面向对象编程
    • 有关术语

      • class
      • object
      • instance
      • message
      • method
      • methoddispather
      • interface
      • implementation
    • OC预研中的OOP

      • @interface
        @interface Circle :NSObject{
        @private
        ShapeColor fillColor;
        ShapeRect bounds;
        }
        • (void) setFillColor:(ShapeColor) fillColor;
        • (void) setBounds:(ShapeRect) bounds;
        • (void) draw;
          @end
        • 中缀法
          • [circle setFillColor:kRedColor];
          • [textThing setStringValue:@"hello there" color:kBlueColor];
      • @implementation部分
        @implementation Circle
        • (void) setFillColor:(ShapeColor)c {
          fillColor = c;
          }
        • (void) setBounds:(ShapeRect)b {
          bounds = b;
          }
          //(NSString) str:(ShapeColor)c {
          // return @"Ns";
          //}
        • (void) draw {
          NSLog(@"drawing a circle at (%d,%d,%d,%d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,@"fillColor");
          }
          @end
      • 实例化对象
        • 类数组的定义
          • id shapes[3];
          • shapes[0] = [ Circle new ];
        • 类的初始化和调用
          ShapeRect r1 = {0,0,30,10};
          shapes[0] = [Circle new];
          [shapes[0] setBounds: r1];
          [shapes[0] setFillColor: kGreenColor];
          [shapes[0] draw];
          • [ shapes[0] setBounds: rect0 ]
            • 对象方法调用
      • 扩展Shape-Object对象
  • 继承

    • 为何使用继承

      • 合并多个相似类的接口
      • 只完成不同的方法,公用相同的方法
    • 继承和模板

      • 继承是简化相似对象
      • 模板是简化相似类型
    • 集成的语法格式
      @interface Shape1 :NSObject{
      ShapeColor fillColor;
      ShapeRect bounds;
      }

      • (void) setFillColor:(ShapeColor) fillColor;
      • (void) setBounds:(ShapeRect) bounds;
      • (void) draw;
        @end
        @implementation Shape1
      • (void) setFillColor:(ShapeColor)c {
        fillColor = c;
        }
      • (void) setBounds:(ShapeRect)b {
        bounds = b;
        }
        //(NSString) str:(ShapeColor)c {
        // return @"Ns";
        //}
      • (void) draw {
        NSLog(@"drawing a circle at (%d,%d,%d,%d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,@"fillColor");
        }
        @end

      ​​
      @interface Egg : Shape1
      @end
      @implementation Egg
      -(void) draw {
      NSLog(@"drawing a Egg at (%d,%d,%d,%d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,@"egg");
      }
      @end

      • @interface Circle :NSObject
      • @end
      • 术语
        • 父类
        • 子类
    • 集成的工作机制

      • 方法调度
        • 先调用子类的实现
        • 子类没有实现,调用父类的实现
      • 实例变量
        • 通过基地址偏移来获取变量
    • 重写方法

      • super关键字
        • 可以在重写时调用超类的方法
      • 子类重写方法来解决问题的具体实现
  • 复合
    @interface Tire : NSObject

    • (NSString *) desc1;
      @end
      @implementation Tire
    • (NSString *) desc1
      {
      return @"I am Tire";

    }
    @end
    @interface Unicycle: NSObject {
    Tire *tire;
    }
    @end

    • 什么是复合
      • 就是在类中引用其他的类
      • 通过实例的指针来完成
    • 自定义NSLog()
      • 类的描述
        • description方法重写,会在打印类的时候调用这个方法
    • 存取方法
      • 增加set
      • get
    • 扩展CarParts程序
    • 复合还是继承
      • 类似的东西用继承
      • 不同的东西整合为一个需要用复合
  • 源文件组织

    • 拆分接口和实现
      • 分拆header头文件为.h结尾
      • 具体实现的文件.m结尾
      • 在m中通过import 头文件.完成定义和实现的绑定
    • 拆分Car程序
    • 使用跨文件依赖编译
      • 重新编译须知
        • 通过import来解决依赖关系
        • 通过@class Tire来解决依赖时编译问题.跟import类似.
          • 只适用于通过指针来使用的方式
          • 继承的时候还需要使用import来完成
      • 让汽车跑一会
        • 分拆头文件和实现
        • 根据功能来做分拆
      • 导入和继承
        • 继承的时候需要使用import来导入头文件
  • 深入了解Xcode

    • 窗口布局一览
      • 工具栏
      • 导航栏
      • 编辑面板
      • 检查器
      • 调试器
      • 库面板
    • 改变公司名称
    • 使用编译器技巧
      • 导航面板
        • 源文件
        • 链接的框架
        • Products
      • 多标签
    • 在Xcode的帮助下编写代码
      • 首行
        • command+[ 缩进
      • 代码自动完成
        • Tab键
        • ctrl+. 翻页
      • 括号配对
      • 批量编辑
        • command+shift+F
      • 代码导航
        • control+F 向前
        • control+B 向后
        • control+P 向上
        • control+N 向下
        • control+A 最开始
        • control+E 最末尾
        • control+T 交换
        • control+D 删除右边的字符
        • control+K 删除当前行
        • control+L 让光标在正中心
        • command+shift+o 快速打开文件
        • 辅助窗口可以绑定头文件和顶部文件
        • Command+control+向上箭头
      • 集中精力
      • 使用导航条
    • 调试
      • 暴力测试
      • Xcode的调试器
        • 增加断点
        • 开始运行
        • 进入debug模式
        • Command +Y 激活和禁用断点
        • Command+control+Y 继续运行
        • F6 跳过
        • F7 跳入
        • F8 跳出
      • 精巧的调试符号
      • 开始调试
      • 检查程序
    • 备忘录
  • Foundation Kit

    • 稳固的Foundation
      • 基于CoreFoundation,纯C完成
      • 面向数据的简单类和数据类型
    • 使用项目样板代码
      • @autoreleasepool
      • 自动释放内存关键字
    • 有用的数据类型
      • 范围
        • NSRange
        • NSRange range={17,4};
      • 集合数据类型
        • CGPoint
        • CGSize
        • CGRect
    • 字符串
      • 创建
        • NSString
        • stringWithFormat
      • 类方法
        • 方法属于类,不属于某一个对象
        • 声明时第一个字符为+号来标识为类方法
        • 最后定义的省略号标识可以接受很多个参数
      • 大小
        • length
        • 实例方法,功能对象绑定而不是类
      • 字符串比较
        • isEqualToString
        • compare
      • 不区分大小写
        • NSCasensensitiveSearch
        • NSLiteralSearch
        • NSNumricSearch
      • 包含
        • hasPrefix
        • hasSuffix
        • rangeOfString
      • 可变性
        • MSMutablestring
        • appendSring
        • appendFormat
    • 集合大家族
      • NSArray
        void test_array2() {
        NSArray *array = @[@"one",@"two",@"three"];
        for(int i=0;i<[array count];i++) {
        NSLog(@"index %d has %@.",i,[array objectAtIndex:i]);
        }
        }
        void test_array3() {
        NSString *string=@"lijunjie:linian:jingyanli:mama";
        NSArray *chunks = [ string componentsSeparatedByString: @":"];
        string = [chunks componentsJoinedByString: @"+"];

        NSLog(@"%@",string);
        

        }

        • Cocoa 类
        • 可以存放任意类型的oc对象
        • 限制
          • 不能存储c语言原始类型
          • 不能存放nil
        • arrayWithObjects
        • NSArray *array2 = @[@"one",@"two",@"three"];
      • 可变数组

        • NSMutableArray
      • 枚举

        • NSEnumerator
        • 对数组进行遍历
      • 快速枚举

        • in关键字来遍历
      • NSDirectory
        void test_map1() {
        Tire *t1 = [ Tire new ];
        Tire *t2 = [ Tire new ];

        NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys:t1,@"t1",t2,@"t2", nil];
        NSDictionary *tires2 = @{@"t1":t1,@"t2":t2};
        
        NSLog(@"t1,%@",tires[@"t1"]);
        NSLog(@"t2,%@",tires2[@"t2"]);
        

        }

      • 请不要快来

    • 其他数值
      • NSNumber
        • (NSNumber *) numberWithChar:(char) value;
        • (NSNumber *) numberWithInt: (int) value;
        • NSNumber *number;
          • number = @'x' //char
          • number = @123456//int
          • number = @12345ul//unsigned long
          • number = @1234ll//long long
          • number = @1245.5f //浮点型
          • number = @YES;
      • NSValue
        • 可以包装struct,装入array中
      • NSNull
        • 可以放入一个nil到map中
        • null的包装类
  • 内存管理

    • 对象生命周期
      • 什么是对象的生命周期
        • 创建 alloc new
        • 生成
        • 交友
        • 释放
      • 引用计数
        • alloc new copy 对象计数+1
        • release 对象计数-1
        • 重写dealloc 可以释放自己的资源
        • init方法是构造函数
        • dealloc是析构函数
      • 对象所有权
      • 访问方法中的保留和释放
      • 自动释放
      • 所有对象放入池中
      • 自动释放池中的销毁时间
      • 自动释放池的工作流程
    • Cocoa的内存管理规则
      • 临时对象
      • 拥有对象
      • 垃圾回收
      • 自动引用计数
    • 异常
      • 与异常有关的关键字
      • 捕捉不同类型的异常
      • 抛出异常
      • 异常也需要内存管理
      • 异常和自动释放池
  • 对象初始化

    • 分配对象
      • 初始化对象
      • 编写初始化方法
      • 初始化时要做些什么
    • 便利初始化函数
    • 更多部件改进
      • Tire类的初始化
      • 更新main函数
      • 清除Car类
    • Car类的内存清理
    • 指定初始化函数
      • 子类化问题
      • Tire类的初始化函数改进后的版本
      • 添加AllWeatherReadial类的初始化函数
    • 初始化函数规则
  • 属性

    • 使用属性值
      • 简化接口代码
      • 简化实现代码
      • 点表达式的妙用
    • 属性扩展
      • 名称的使用
      • 只读属性
      • 自己动手有时更好
      • 特性不是万能的
  • 类别

    • 创建类别
      • 开始创建类别
      • @interface部分
      • @implementation部分
      • 类别的缺陷
      • 类别的优势
      • 类扩展
    • 利用类别分散实现代码
    • 通过了捏创建前向引用
    • 非正式协议和委托类别
      • ITunesFinder项目
      • 委托和类别
      • 响应选择器
      • 选择器的其他应用
  • 协议

    • 正式协议
      • 声明协议
      • 采用协议
      • 实现协议
    • 复制
      • 复制Engine
      • 复制Tire
      • 复制Car
      • 协议和数据类型
    • Objective-C 的新特性
    • 委托方法
  • 代码块和并发性

    • 代码块
      • 代码块和函数指针
      • Objective-C变量
    • 并发性
      • 同步
      • 队列也要内存管理
      • 操作队列
  • AppKit

    • 构建项目
    • 穿件委托文件的@interface部分
    • InterfaceBuilder
    • 设计用户界面
    • 创建连接
      • 连接输出口
      • 连接操作
    • 应用程序委托的实现
  • UIKit

    • 视图控制器
  • 文件加载与保存

    • 属性列表
      • NSDate
      • NSData
      • 写入和读取属性列表
      • 修改对象类型
    • 编码对象
  • 键/值编码

    • 入门项目
    • KVC简介
    • 建路径
    • 整体操作
    • 批处理
    • nil仍然能用
    • 处理未定义问题
  • 使用静态分析器

    • 静态工作
      • 开始分析
      • 协助分析器
  • NSPredicate

    • 创建谓词
    • 计算谓词
    • 数组过滤器
    • 格式说明符
    • 运算符
    • 有Self就足够了
    • 字符串运算符
    • LIKE运算符
  • 属性

    • 语法 @Property
      • @property (copy, nonatomic, class) NSString *shareExtensionGroupIdentifier;
      • 作用,自动生成shareExtensionGroupIdentifier 变量的存储器
    • 例子
      • @property(nonatomic,strong) NSString *carName; //定义
      • @synthesize carName; //实现
        • @synthesize 可以隐藏存储器
      • 点方案
        • car.carName = @"Jeep Compass" //赋值
        • car.carName //获取
      • 消息方案
        • [car setCarName:@"Jeep Compass"];
        • [car carName]
      • 可以只定义,不实现,增加@property也可以直接使用
        • _carName
        • _+属性名
      • 自定义存取名字,不用默认
        • @synthesizecarName = i_am_car_name;
    • 关键字
      • 原子性

        • atomic
          • 默认
          • 原子性
          • 线程安全
        • nonatomic
          • 非原子性
      • 存取器控制

        • readonly
          • 只读
        • readwrite
          • 默认
          • 可读写
          • @property(nonatomic, setter = mySetter:,getter = myGetter ) NSString *name;
      • 内存管理

        • assign
          • 默认
        • retain
          • 对传入对象进行引用计数+1
          • 所有权归传入的对象,只要这个对象不释放,就不被销毁
        • strong
        • weak
        • copy

相关文章

网友评论

      本文标题:objective-c学习

      本文链接:https://www.haomeiwen.com/subject/jnpbiftx.html