• 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

    五  多态

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

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

    多态的特点

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

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

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

    适应需求的不断变化

  • 相关阅读:
    【机器学习基础】02、matplotlib基本01
    HIVE学习笔记
    实时数仓项目-01实时模块搭建
    net_framework-EF CodeFirst
    一些前端知识的小记
    .netcore-FreeSql的使用-搭建context
    netcore配置文件与发布
    .netcore与vue的学习笔记001
    .net项目的mvc简单发布
    .net中的SelectList在Html.DropdownList中的使用
  • 原文地址:https://www.cnblogs.com/limicheng/p/3829361.html
Copyright © 2020-2023  润新知