对不同类型assgin,retain,和copy内部实现的方法

.h文件。。。。。。。

@interface book : NSObject
/*{
    
    NSString *_bookName;    //书名
    CGFloat _bookThickness;  //厚度
    NSString *_bookType;      //书类型
    NSInteger _bookPrice;     //书价格
    NSString *_publishingHouse;//出版社
    NSString *_publishintTime;  //出版时间
}*/  //在@property里面,其实就包含了定义实例变量,setter方法和getter方法。这里可以不用在定义实例变量了 
@property (nonatomic , copy)NSString *bookName;//用copy写完整的属性
@property (nonatomic , assign)CGFloat bookThickness;
@property (nonatomic , retain)NSString *bookType;//retain不建议使用,大多使用copy
@property (nonatomic , assign)NSInteger bookPrice;
@property (nonatomic , copy)NSString *publishingHouse;
@property (nonatomic , copy)NSString *publishintTime;
- (void)read;
- (void)write;
@end

.m文件

@implementation book
@synthesize bookName = _bookName ;
@synthesize bookThickness = _bookThickness;
@synthesize bookType = _bookType;
@synthesize bookPrice = _bookPrice;
@synthesize publishingHouse = _publishingHouse;
@synthesize publishintTime = _publishintTime;
- (void)setBookName:(NSString *)bookName
{
    if (_bookName != bookName) {
        [_bookName release];//auto---All---Combined---Language--Objective C--->no这里是对内存的一个设置,
        _bookName = [bookName copy];
    }
}
- (NSString *)bookName
{
    return  [[_bookName retain] autorelease];
}
- (void)setBookThickness:(CGFloat)bookThickness
{
    _bookThickness = bookThickness;
}
- (CGFloat)bookThickness
{
    return _bookThickness;
}
- (void)setBookType:(NSString *)bookType
{
    if (_bookType != bookType) {
        [_bookType release];
        _bookType = [bookType retain];//retain和copy唯一的不同在这里。
    }
}
- (NSString *)bookType
{
    return [[_bookType retain] autorelease];
}
- (void)setBookPrice:(NSInteger)bookPrice
{
    _bookPrice = bookPrice;
}
- (NSInteger)bookPrice
{
    return _bookPrice;
}
- (void)setPublishingHouse:(NSString *)publishingHouse
{
    if (_publishingHouse != publishingHouse) {
        [_publishingHouse release];
        _publishingHouse = [publishingHouse copy];
    }
}
- (NSString *)publishingHouse
{
    return [[_publishingHouse retain] autorelease];
}
- (void)setPublishintTime:(NSString *)publishintTime
{
    if (_publishintTime != publishintTime) {
        [_publishintTime release];
        _publishintTime = [publishintTime copy];
    }
}
- (NSString *)publishintTime
{
    return  [[_publishintTime retain] autorelease];
}
- (void)read;
{
    NSLog(@"这是一本书");
}
- (void)write
{
    NSLog(@"可以写");
}
@end
时间: 2024-08-12 12:35:29

对不同类型assgin,retain,和copy内部实现的方法的相关文章

有一个NSStirng类型,retain方式声明的name属性的setter方法内部每一行代码的作用?

- (void)setName:(NSString *)name { 判断原有对象和新对象是否是同一个对象,如果是同一个,就没有必要再重新赋值,否则会先release 再retain,就会变成野指针 if (_name != name) { 释放保有之前对象的所有权 [_name release]; 让实例变量 _name保有新的对象的所有权 _name = [name retain]; } } 有一个NSStirng类型,retain方式声明的name属性的setter方法内部每一行代码的作用

属性readwrite,readonly,assign,retain,copy,nonatomic

copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效.更深入的讨论,请参考“复制”部分. retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1对其他NSObject和其子类对参数进行release旧值,再retain新值指定retain会在赋值时唤醒传入值的retain消息.此属性只能用于Objective

IOS中Retain和Copy的区别

IOS中Retain和Copy的区别 1 ,可读性: readonly  . readwrite@property(readwrite,....) valueType value;这个属性是变量的默认属性,就是如果你 (readwrite and readonly 都没有使用,那么你的变量就是 readwrite 属性 ) ,通过加入 readwrite 属性你的变量就会有 get 方法,和 set 方法.property(readonly,...) valueType value;这个属性变量

OC语法——Object-C retain、copy、mutableCopy的详细分析

OC语法中的retain.copy.mutableCopy 大家都基本知道它的基本意思,但是对于mutable类型和immutable类型的处理上有很多童鞋并没有真正测试过,今天就和大家分享下: 1.先来看下immutable类型的非容器类: NSString的retain.copy和mutableCopy的测试 NSString *string = @"abc"; NSString *retainString = [string retain]; NSString *copyStri

object-c中的assign,retain,copy,atomic,nonatomic,readonly,readwrite以及strong,weak

assign:指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy.assign指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy. retain:指定retain应该在后面的对象上调用,前一个值发送一条release消息.你可以想象一个NSString实例,它是一个对象,

assign retain 和copy的区别

assign 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等 等. 此标记说明设置器直接进?行赋值,这也是默认值.在使?用垃圾收集的应?用程序中,如 果你要?一个属性使?用assign,且这个类符合NSCopying协 议,你就要明确指出这个标 记,?而不是简单地使?用默认值,否则的话,你将得到?一个编译警告.这再次向编译器说 明你确实需要赋值,即使它是可拷?贝的. retain对其他NSObject和其?子类对参数进?行

retain和copy的区别

原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别.那究竟是有什么区别呢? assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们. Retain vs. Copy!! copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 那上面的是什么该死的意思呢? Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象

iOS开发-assign、retain、copy、strong、weak的区别

对于初学的开发者,对于assign.retain.copy.strong.weak的用法及意义可能不是很明白,我对于这个问题也研究了很久,写篇博文,巧巧代码,让我们来瞧瞧吧! 先定义一个Student类: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, copy) NSString *name; @end 然后先是mrc下的assign声明 @property (nona

ios retain 与 copy 的区别

.retain 与copy区别 retain 的仅仅是引用计数加1,但是并没有创建新的对象.它们的指针是指向相同的内存地址. copy 是创建一个新的对象作为原来对象的副本,新创建出来的引用计数并没有加1. copy 有两中协议 第一种NSCopying 与NSMutableCopying 一种是可变复制,一种是不可变复制 : 可变是通过 mutableCopy 来实现可变的复制 : 不可变是通过 copy 直接复制得到: 常用复制的的有:NSArray,NSNumber(只有不可变的复制),N