zoukankan      html  css  js  c++  java
  • 04-OC属性的使用、自动释放池、封装和继承

    目录:

    一、IOS6声明式属性的使用

    二、autoreleasepool自动释放池

    三、封装、继承

    回到顶部

    一、IOS6声明式属性的使用

    注:声明式属性默认情况下,并没有解决内存问题,

    当使用@property(retain)声明对象类型属性时,可以解决setter中内存问题,(release旧值,retain新值),在dealloc中要release掉最后的那个retain。

    1 语法格式

    @property(参数1,参数2)引用类型* 变量名;

    一般这么来写:@property(nonatomic,retain)TRStudent* stu;

    2 参数2

    *retain解决属性是对象的内存问题。

    *assign默认类型,setter方法直接赋值,而不进行retain操作

    *copy一些特殊对象类型,如果不希望和别人共享一个对象,用copy会自动创建一个新的对象。NSString必须用copy。NSString是只读的。而其他所有的对象用retain。

    *readonly只读,去掉setter方法,只保留getter。

    *readwrite可读可写,默认

    retain和copy的区别

    retain相当于引用复制

    copy相当于内容复制

    3 参数1

    nonatomic 非原子性操作,安全性差,效率高,在ios开发中一般使用nonatomic。

    atomic原子性操作,在多线程使用的时候,一般来防止写未完成的时候,被另一个线程读取,造成数据安全性问题。这中操作是耗费资源的。

    练习:有一台电脑TRComputer,能干什么playGame,显示cpu信息,内存(mem)信息,TRCpu类(运行频率hz x G),TRMem类(容量size x G),

    第一次玩游戏 cs

    cpu: AMD 1G hz

    mem:KingMaz 2G size

    第二次玩游戏 战地4

    cpu: Intel 2G hz

    mem:三星 8G size

    1 创建类、对象

    2 给类添加属性、初始化方法、工厂方法

    3 声明式属性方法,解决内存问题

    回到顶部

    二、autoreleasepool自动释放池

    1 池特点:节约空间、节约资源、共享

    2 通过自动释放池来管理对象,只需要一个自动释放池,可以管理很多对象,当自动施法池结束的时候,会自动向池中的每个对象都发送release消息。

    3 自动释放池是可以嵌套的,会先释放里面的,在释放外面的

    4 工厂方法在使用时通常发送autorelease消息。

    回到顶部

    三、封装、继承

    1 封装

    封装属性和方法都放在一个对象,只给外界公开访问的接口,把具体实现隐藏,其主要目的:可读性、可维护性、可扩展性。

    在OC中把需要公开的属性、方法定义在声明.h文件中interface部分,而把不需要公开的属性、方法定义在.m文件中implementation部分,隐藏起来。

    封装的好处:

    ·代码的结构更清晰

    ·可以和第三方合作,但又保护了源代码,避免泄露。

    2 OC中实例变量的处理,一般情况下,实例变量是不能公开的,所有实例变量应该定义在implementation部分(私有),除非需要直接在子类中访问,可定义在interface部分,可以使用以下语法声明实例变量,来控制实例变量的访问范围。

    变量的访问范围:

    @public 公开,可以类外方位

    @package 包,可以在包内访问,一个项目一定是在同一个包下

    @protected 受保护的,可以在本类内部和子类内部访问

    @private 私有的,只可以在本类的内部访问

    注:默认实例变量默认修饰符是@protected

    在mian函数中实例对象可以通过->访问实例变量,但不推荐,一般通过.语法来访问实例变量

    3 封装中的方法

    *如果.h文件中,未声明方法,此方法就是私有方法,在其他文件中访问该方法是不合法的

    *如果.h文件中,声明方法,此方法就是公有方法,在其他文件中可以访问该方法

    4 继承

    继承是一种代码复用技术,是类与类之间的一种关系。

    A类继承B类,A类中就直接拥有B类中的属性和方法。我们把A类叫B类的子类,把B类叫A类的父类(基类)

    继承方式

          单继承:一个类只能继承一个父类。OC Java C#

          多继承:一个类可以有多个父类。C++

    继承的语法

          @interface 类父类(NSObject)

          @end

    继承是类与类的关系,是一种"is a"关系

    子类对父类继承的方法不满意,可以在子类重写父类的方法,

    (覆盖)重写的原则:

    ·方法名相同

    ·参数类型相同

    ·返回类型相同

    如果重写父类的方法,优先调用子类的方法,如果子类没有重写父类的方法,则调用父类的方法。

    练习:

    1)父类Animal,有一个方法叫shout的方法,父类默认该方法输出"动物叫",创建两个子类Cat,Dog,Cat类没有重写父类的方法,而Dog重写父类的方法,改成自己的叫声"汪汪汪"

    2)写出以下类,用最少的代码解决问题,

    TRShape形状类

    TRRectangle矩形类x,y

    TRCircle圆形r

    TRSquare正方形x

    求:周长perimeter与面积area,show方法,查看周长和面积。属性、初始化方法、工厂方法、内存管理、继承。

    //www.ceiaec.org信息技术

  • 相关阅读:
    http协议详谈
    配置nginx 反向代理
    利用background-positon,background-image ,实现背景渐变
    vue +webpack 打包配置优化
    记项目中易出现的bug点
    vue 中基于html5 drag drap的拖放
    vue 项目技巧
    完整项目搭建全过程(vue-cli+webpack)
    vue+ D3+drag
    项目总结(3.28)
  • 原文地址:https://www.cnblogs.com/yangmx/p/3485194.html
Copyright © 2011-2022 走看看