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信息技术

  • 相关阅读:
    06 is和==的区别 encode()编码 decode()解码
    05 dic的增删改查 字典的嵌套 考试题dic.get()的相关使用
    03 编码 int ,bool,str的常用操作 主要讲str
    01 基本数据类型 变量 if语句
    04 列表的增删改查 常用方法 元祖 range
    02 while循环 格式化输出 运算符
    多校2 Harmonious Army hdu6598 网络流
    P3159 [CQOI2012]交换棋子 网络流
    P2172 [国家集训队]部落战争 最大流
    P2402 奶牛隐藏 网络流
  • 原文地址:https://www.cnblogs.com/yangmx/p/3485194.html
Copyright © 2011-2022 走看看