oc对象中属性总结


UIView 用weak

NSstring 用copy

其他对象用strong

@property(getter = isRich,setter = setRich:)BOOL rich;//当属性是bool类型的时候我们一般需要指定生产的get和set方法,提高可读性,当然这里的set方法和默认的一致。

@property(assign,atomic,readonly) int age;//readonly代表只生产get方法,readwrite代表只生产set方法

@property(assign,atomic) int age;//这里的atomic代表这个属性是线程安全的,多个线程访问的时候会加锁,nonatomic代表不需要线程安全考虑,一般这个都用这个属性。不需要考虑线程安全。

@property(assign) int age;//assign表示按照普通的方法生产getset方法,不会像下面的内存管理一样生产set方法

@property(nonatomic,strongBook * book;//nonatomic代表此对象不需要线程管理。

@property(retain,nonatomic) Book * book;//retain修饰oc对象的时候,会自动管理内存

retain修饰的时候set方法的时候会这么产生,当然retain是不会生产这样的dealloc,需要自己复写。

-(void)setBook:(Book *)book{

    if(_book!=book){

    [_book release];

    _book=[book retain];

    }

}

当然在完整的内存管理的时候,set进来的时候引用计数器+1,在这个类的dealloc方法里要release一次

-(void)dealloc{
  //insert your code;
  [_book release];
  [super dealloc];
}
上面的setter方法和这个dealloc方法是配套的使用的内存管理

oc中所有在.h里面声明的方法都是公共方法。
当要声明一个私有方法的时候只要将这个方法放到.m文件里面即可,并且没有在.h里面没有声明。
oc中的成员变量一般都用"_"开始。
当我们要自定用oc的初始化方法的话
initWithAge:(int)age andNo:(int)no{
  self=[self init]
  if(self){
     _age=age;
     _no=no;
    }
  return self;
}

oc中有个方法和java的toString方法一样叫做description方法,复写即可(这个方法是来自NSObject的)原来只会打印内存地址,这里将其复写了下
-(NSString *)decription{
NSString * str =[NSString stringWithFormat:"ksdfhk%d",_age];
    return str;
}


@synthesize age;//这个关键字在生成setter和getter方法的时候会在.h里面找那个同名的属性,如果找不到会自动造一个同名的
当如果我们要其访问的成员变量是_age的时候
我们可以这么写
@synthesize age=_age;//这个就是在指定访问的成员变量;有开发工具生产的属性都是私有的。


xcode4.5以后,只要你写了@property int age就会自动产生getter和setter的声明和实现,,,实现的时候还是自动访问_age这个属性(现在.h里面找),如果没有这个属性就会自动生产一个私有_age(
这里指的私有的就是在.m文件里面定义的)
所有从这里就可以看出私有的变量可以在.h里面定义然后用@private修饰,或者直接定义在.m文件里面

这里生产的都是标准的setter和getter方法,如果有其他需求必须自己实现其getter和setter方法。
oc中修饰成员变量的3中权限
@private
@protected
@public
但是@public好像没什么意义,要怎样用到这个@public呢

Student *stu=[[[Student alloc]init]autorelease];
stu->age=10;
age是Student类的一个公共属性,所以可以像上面那样访问
1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
原文地址:https://www.cnblogs.com/liyang31tg/p/3601841.html