[TwistedFate]高级内存管理 多态

内容回顾

Person *p = [[Person alloc] init]; 
NSString *name = [[NSString alloc] initWithFormat:@"王龙"];
NSString *name1 = [[NSString alloc] initWithFormat:@"zhuanghzhua"];
p.name = name;
NSLog(@"%ld",name.retainCount);
p.name = name1;
[name release];
[name1 release];
// 这个位置 p释放了吗
NSLog(@"%@",p.name);
[p release];
// 定义了属性 同时在实现set和get方法的时候,属性生成的变量不带下划线
// 写一个不报错,是因为系统默认生成了一个方法 和下划线name
- (void)setName:(NSString *)name{
    if (_name != name) {
        // 如果你对空进行release 相当于无操作 
        [_name release];
        _name = [name retain];
    }

}
- (NSString *)name{
    return _name;                                                                                                                     
}
- (instancetype)initWithAge:(NSInteger)age name:(NSString *)name sex:(NSString *)sex{
    self = [super init];
    if (self) {
        // 学了属性和内存之后 不要出现_name 全部写self;
        self.name = name;
        // 这种赋值方式 对于基本数据类型是安全的
        // 对于对象类型赋值是不安全的  应该调用set方法 保证内存的安全
        self.sex = sex;
        self.age = age;
    }
    return self;
}

容器内存的管理

数组

数组在添加元素时,如果你把一个元素添加到容器类的对象中(数组 字典 集合中) 那么系统将自动给数组中的元素 发送retain消息 从而使数组中的元素 引用计数 + 1
数组在释放的时候,如果数组释放的时候,那么在释放之前,系统会自动给数组中的每一个元素发送一个release消息,从而使数组中的元素 引用计数- 1

字典

与数组一样

多态

多态的实质:就是父类指针指向 子类对象
具体用到的地方:UI界面的添加控件addSubView:(UIView *)

还有一个就是写通用的方法 根绝不同类型的参数 调用不同类下的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值