美文网首页
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