zoukankan      html  css  js  c++  java
  • iOS学习笔记---oc语言第十天

    内存管理高级

    一 属性的内部实现原理   assign   retain    copy

    assign 下的属性内部实现

    setter方法

    @property(nonatomic,assign)NSString *name;

    - (void)setName:(NSString *)name{

        _name = name;

    }

    getter方法

    - (NSString *)name

    {

        return _name;

    }

    retain的setter和getter方法

    @property(nonatomic,retain)NSString *name;
    - (void)setName:(NSString *)name{
        if (_name != name) {
            [_name release];
            _name = [name retain];
        }
    }
    - (NSString *)name
    {
        return [[_name retain] autorelease];
    }

    copy的setter和getter方法

    @property(nonatomic,copy)NSString *name;
    - (void)setName:(NSString *)name{
        if (_name != name) {
            [_name release];
            _name = [name copy];
        }
    }
    - (NSString *)name
    {
        return [[_name retain] autorelease];
    }

    二 dealloc

    dealloc是NSObject的一个实例方法,与alloc对应用于回收开辟的内存空间

    这个方法在对象引用计数为0时,由系统自动调用

    通常我们在dealloc中释放类的实例变量

    永远不要手动调用dealloc

    在dealloc方法的最后一行,必须要写[super dealloc];

    三  便利构造器的内存管理

    Person类的便利构造器

    Person.m中

    + (Person *)personWithName:(NSString *)name{

    Person *p = [[Person alloc] initWithName:name];

    return [p autorelease];

    }

    四  collection 的内存管理

    collection就是NSArray,NADictionary,NSSet...等容器类

    collection 会自主管理自己的内部元素

    加入collection中得对象会被retain

    移除collection的对象会被release

    collection被释放会对内部所有对象release

    五  多态

    不同类型的对象在响应同一方法时的不同实现

    父类指针可以指向子类对象

    多态的特点

    父类指针可以指向不同的子类对象

    允许在多个类中定义同一个消息接口

    可以屏蔽不同子类对象之间的差异,写出通用代码

    适应需求的不断变化

  • 相关阅读:
    笨蛋的厄运
    模仿写了一个摸鱼应用解决原作者的问题
    retain和copy还有assign的区别
    分析与理解通知消息WM_NOTIFY
    备忘录
    数据结构C++模板实现之单向链表
    服务器(VPS合租)
    复制构造,赋值操作符,const重要性
    Windows 注册表操作简介
    窗口类封装之窗口对象消息处理的映射方法(1)
  • 原文地址:https://www.cnblogs.com/limicheng/p/3829361.html
Copyright © 2011-2022 走看看