assign,copy,retain -Object-C中糾結的三個屬性(copy)

http://blog.sina.com.cn/s/blog_7b9d64af01019943.html

assign,copy,retain

這三個屬性在我們申明屬性時,經常用到,那麼到底時什麼東西呢 ?有什麼意義呢?那我們就來看清楚吧。
這次,要講的屬性爲:copy

開始吧,不廢話了,還是用代碼說話。

-----------------*.h

 #import
@interface AddressCard : NSObject{
    NSString *name;
    NSString *email;
}
// copy 屬性,編譯器將在setter方法內生成實例變量的副本
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *email;
- (void)setName:(NSString *)theName andEmail:(NSString *)theEmail;
- (void) print;
@end

------------*.m
 
#import "AddressCard.h"

@implementation AddressCard
@synthesize name;
@synthesize email;

- (void) print{
    NSLog(@"=====================");
    NSLog(@"name=%s",[name UTF8String]);
    NSLog(@"email=%s",[email UTF8String]);
    NSLog(@"=====================");
}

- (void)setName:(NSString *)theName andEmail:(NSString *)theEmail{
    self.name=theName;
    self.email=theEmail;
}

@end

實際使用中:編譯器將爲我們生成相應的getter,setter方法:
getter方法:
-(NSString *)name{
    return name;
}

setter方法:
-(void)setName:(id)newValue{
 
    if (name != newValue) {
        [name release];
        name = [newValue copy];
    }
}

copy屬性:

這樣,如果我們使用self.name將會執行編譯器爲我們生成的setName方法。
如果用name,那將直接爲變量name進行指針賦值。
這三個屬性,我想用三篇來分別講述。這樣會更加清晰。
希望對您有所幫助
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章