retain assign copy在@propeerty中的使用实际上是通过控制set方法进行内存管理

retain assign copy在@propeerty中的使用实际上是通过控制set方法进行内存管理。下面详细介绍:


1.retain:


    例如:


        @class Dog


        @property(nonatomic,retain) Dog *dog;


    注:nonatomic与atomic相对应,涉及线程,比较麻烦,这里不做赘述,读者仅需记住,nonatomic相对于atomic来说性能高,而声明属性时一般默认为atomic,故需在此申明nonatomic


这里使用了retain,那么在set方法中,究竟如何体现的呢?


- (void)setDog:(Dog *)dog


{


   if(_dog != dog){          //判断是否需要重新赋值


      [_dog release];        //释放旧引用,计数器-1


      _dog = [dog retain];   //重新赋值,计数器+1


   }


}


2.assign:


   例如:


        @property(nonatomic,assign)int count;


这里使用了assign,那么在set方法中,究竟如何体现的呢?


- (void)setCount:(int)count


{


   _count = count;


}


2.assign:


   例如:


 


        @property(nonatomic,copy)NSString * str;


这里使用了copy,那么在set方法中,究竟如何体现的呢?


- (void)setStr:(NSString *)str


{


 if(_str != str){          //判断是否需要重新赋值


      [_str release];        //释放旧引用,计数器-1


      _str = [str copy];   //重新赋值,使用copy


   }


}


总结:


     1.retain:先release旧值,再retain新值,在上例中_dog与dog最终指向同一快内存区域。


     2.assign:直接赋值,不考虑内存管理。


     3.copy:先release旧值,再copy新值,copy的本质为复制该内存所存储的内容,重新创建一个对象赋给其相同的内容,很明显,在copy这个过程中也发生了一次retain,不过这是个全新的对象。在上例中,_str与str最终指向了不同的内存区域,但其内容一样。


     4.从retain assign copy的特点中我们可以看出:


            retain一般适用于OC中的对象


            assign一般适用于非OC对象,如int等普通类型


            copy一般适用于NSString等不可变的对象,因为是重新创建了对象,并且内容不变,因此不用担心后面的操作会对该属性的值产生影响。


 


copy与retain实例分析:


      假设str为对象p的属性


      @property(nonatomic,copy)NSString *str;


      NSMutableSting *s = [[NSMutableSting alloc] setString:@"hello"];


      p.str = s;   //此时,str的值为@"hello"


      [s appendString:@"world"];   //此时,s的值为"hello world",但是str的值依然为"hello".


     但是如果开始时str的申明为:


    @property(nonatomic,retain)NSString *str;


    那么,在进行完 [s appendString:@"world"]之后,str的值将变为"hello world".因为str与s共用一块内存,内容完全相同,而s是可以改变的,所以s改变后,str也将改变。


 


注:以上皆为个人理解,如有错误,请留言指正,万分感谢。
下载方式:https://pan.quark.cn/s/c9b9b647468b ### 初级JSP程序设计教程核心内容解析#### 一、JSP基础概述JSP(JavaServer Pages)是由Sun Microsystems公司创建的一种动态网页技术规范,主要应用于构建动态网站及Web应用。JSP技术使得开发者能够将动态数据与静态HTML文档整合,从而实现网页内容的灵活性和可变性。##### JSP的显著特性:1. **动态与静态内容的分离**:JSP技术支持将动态数据(例如数据库查询结果、实时时间等)嵌入到静态HTML文档中。这种设计方法增强了网页的适应性和可维护性。2. **易用性**:开发者可以利用常规的HTML编辑工具来编写静态部分,并通过简化的标签技术将动态内容集成到页面中。3. **跨平台兼容性**:基于Java平台的JSP具有优良的跨操作系统运行能力,能够在多种不同的系统环境中稳定工作。4. **强大的后台支持**:JSP能够通过JavaBean组件访问后端数据库及其他资源,以实现复杂的数据处理逻辑。5. **执行效率高**:JSP页面在初次被请求时会被转换为Servlet,随后的请求可以直接执行编译后的Servlet代码,从而提升了服务响应的效率。#### 二、JSP指令的运用JSP指令用于设定整个JSP页面的行为规范。这些指令通常放置在页面的顶部,向JSP容器提供处理页面的相关指导信息。##### 主要的指令类型:1. **Page指令**: - **语法结构**:`<%@ page attribute="value" %>` - **功能**:定义整个JSP页面的运行特性,如设定页面编码格式、错误处理机制等。 - **实例**: ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值