iOS知识点~mi日久生。。。OC学习项目

iOS - 属性关键字的使用

2015-08-09  本文已影响5124人  Mitchell
作者:Mitchell 

一、 assign###


二、 weak


三、 strong


四、 copy

@interface ViewController ()
//注意这里虽然是copy的属性,但是我们这个指针还是强引用的
@property(nonatomic,copy)NSString*name;
@end
@implementation Viewcontroller
 -(void)viewDidLoad{
    [self viewDidLoad];
    NSMutableString*str = [NSMutableString stringWithFormat:@"aaa"];
    self.name = str;
    [str appendString:@"bbb"];
    NSLog(@"str= %@",str);
    NSLog(@"name = %@",self.name);
    NSLog(@"%p,%p",str,self.name);
}
@end

我们来看一下说出的结果:
- str = aaabbb
- name = aaa
- 输出的内存地址:0x7f90f3028180 , 0x7f90f3027450
- 这说明了这个copy的含义就是,我们在给name属性赋值的时候,,系统默认先将str执行一次copy方法,然后再将结果赋给我们的属性,只有这样你再之后对str修改之后,name的值还是不变的,说明两个指针其实指向的是不同的内容,之后我们又打印了我们的指针值,得出不同的结果又证明了上述所说。
- 注意:并不是所有情况下我们的string都必须使用copy,因为如果我们的需求是希望string是随着我的改变而改变的,那么这个时候应该使用strong。

   -(id)copyWithZone:(NSZone *)zone{
    Mitchell*copyMit = [[Mitchell allocWithZone:zone] init];
    copyMit.name = self.name;
    return copyMit;
}
- zone:系统返回给我们 copy 对象的内存空间
- 注意:必须在初始化方法中给属性赋值,才能让 copy 出的对象和原来的对象有相同的属性。
-(void)setName;(Mitchell*)name{
    _name = [name copy];
}

上一篇下一篇

猜你喜欢

热点阅读