OC基础-零基础学习Objective-C:第五部分.@property

成员变量的作用域
        成员变量有四种作用域:
        1.@public // 公共,即只要是声明了该头文件的文件内都可以直接调用。
        2.@private //  只有自己的set、get方法可以调用。为系统默认
        3.@protect //  自己和子类的set、get方法可以调用。
        4.@package //在同一框架下可以调用,这个适用于自己开发框架的项目,一般用不到的。

@property详解
        在声明成员变量的时候就不需要写一大堆的无聊的代码啦,直接一个@property搞定所有你想做的事情。
例如原来的代码是这样的:
                 @interface Person : NSObject
              {
                     int_age;
              }
              -(void)setAge:(int)age;
              -(int)age;
              @end
              @implementationPerson
              -(void)setAge:(int)age
              {
                     _age =age;
              }
              -(int)age
              {
                     return_age;
              }
              @end
        现在的代码是这样的:
                 @interface Person : NSObject
              @property intage;
              @end
        是不是很简单?
        因为苹果官方默认的是,使用@property自动创建相应类型的下划线成员变量,并且直接生成该成员变量的set方法和get方法,这种创建的成员变量为默认的@private,省去了程序员大部分的无用时间。
有的时候我们想自己定义set方法和get方法怎么办呢?因为有的时候赋值是需要条件的呀,那么可以用以前的方法,直接在@implementation下写set方法和gei方法,自己写的set方法和get方法会默认覆盖系统自动生成的set方法和get方法。
        这个@property直接生成相关代码是一步一步演变过来的,其中有一段时间我们需要在@implementation下写这个代码:
               @implementation Person
             @synthesizeage;
             @end
                @implementationPerson
             @synthesize age :_age;
             @end
        来告诉Xcode要生成成员变量和set、get方法,当然现在完全没有必要这样写了,这样按照第一种方式写的后果就是,你创建的不是带下划线的成员变量,而是没有下划线的成员变量。
        so,亲们直接使用@property就好了。
       @property参数:
       原子属性:
       nonatomic:该变量为非线程安全型,访问速度快,多个线程可以同时对其进行访问,需要注意的是,当两个不同的线程对其访问时,容易失控
       atomic:默认属性,该变量为线程安全型,多线程中只能有一个线程对它进行访问,影响访问速度,在非ARC情况下,徐傲设置访问锁来保证对该变量进行正确的get/set。
       strong:ARC中的默认属性,成员变量为强指针,相当于非ARC中的retain。
       weak:ARC中的属性,成员变量为弱指针,相当于非ARC中的assign。
       assign:适用于OC对象的简单数据类型,简单赋值,不更改索引计数。
       retain:使用了引用计数,retain+1,当计数为0时调用dealloc释放内存,ARC下不可用
       copy:用于非共享内存,每个指针都有自己的内存空间。
       readonly:只读属性,只有get方法,没有set方法。
       readwrite:默认的可读可写属性,有get和set方法。
       unsafe_unretauined:在ARC中与assign类似,只是告诉ARC如何正确的调用声明为unsafe_unretauined变量的retain和release。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值