内存入门

2 篇文章 0 订阅
2 篇文章 0 订阅

#pragma mark 手动管理内存

//影响引用计数改变的方法:

        //alloc   retain   release   autorelease   dealloc    copy    mutableCopy


#pragma mark   引用计数增加


 //alloc 将引用计数从零变为一;


//retainCount 看引用计数


 //将对应的内存引用加一,并返回内存首地址;

        Person *per1 = [per retain];

//释放

        [per1 release];


//当引用计数为1时,再次releas 不会将引用计数减为0

        //而是将内存释放


 [per2 retain];   //持有对象;


 //自动释放池

        @autoreleasepool {

            //自动释放    当自动释放池释放时,释放对象;

            //只有在自动释放池里面使用autorelease才有效;

            [per2 autorelease];

            [per2 autorelease];

                 NSLog(@"%ld",per2.retainCount);

        }  //自动释放池释放


//不能对常量区的内存进行管理

NSString   以及常量

 //不可变字符串引用计数都是-1,及是整数的最大值;


 //内存管理原  

         一、谁创建,谁释放;  alloc  release/autorelease

         二、是持有,谁释放;  retain  release/autorelease

         四、谁拷贝,谁释放;  copy   release/autorelease

         三、没有retain,alloc,copy就不释放;


//当对象被销毁时,系统自动调用这个方法

-(void)dealloc {

    //释放属性的空间,本类  

    NSLog(@“快释放我");    

    //先释放本类在释放父类;

    [super dealloc];  //释放父类;

    [_name release];

}

 Person *per2 = [per copy];

@interface Person : NSObject <NSCopying>

浅拷贝

//-(id)copyWithZone:(NSZone *)zone {

//    Person *p = [[Person alloc] init];

//    p.name = self.name;

//    return p;

//}


伪拷贝

//-(id)copyWithZone:(NSZone *)zone {

//    return [self retain];

//}


//深拷贝  对象开辟新的空间,两个对象的实例变量也指向不同的空间。

-(id)copyWithZone:(NSZone *)zone {

    Person *p = [[Person alloc] init];

//      p.name = [[NSString alloc] initWithString:self.name];

    p.name = [[NSString alloc] initWithFormat:@"%@",self.name];

    return p;

}



#pragma 协议

//以@protocol 开始,以@end结束

/*

 @protocol 协议名称 <父协议>

 

 

    协议方法(标志)

 

 

 @end

 */


//协议只需要方法的声明,不需要实现;

在.M文件里写实现;


协议与类的融合

//协议格式:   <协议名称>

// 遵守协议之后,

//多个协议 用逗号隔开;

@interface Person : NSObject <iOsProgramer, RedPacket>


选择实现;

@optional


默认是必须实现的方法;

@required

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值