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

五  多态

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

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

多态的特点

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

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

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

适应需求的不断变化

原文地址:https://www.cnblogs.com/limicheng/p/3829361.html