1.6.3 IOS @property详解

property是Objective-C的关键词,与@synthesize配对使用,用来让编译好器自动生成与数据成员同名的方法声明。@synthesize则是用来生成对应声明方法的实现。

 

1.语法格式:

 

@property (参数1,参数2)类型名字;

这里的参数,主要有以下三种:

a.setter/getter方法(assign/retain/copy) 

b.读写属性(readwrite/readonly) 

c.atomicity(nonatomic)

assign/retain/copy  代表赋值的方式,确定属性的setter如何处理这个属性。一些特别的Object比如NSSstring使用copy。assign关键字代表setter直接赋值,而不是复制或者保留它。适用于基本数据类型,比如NSInteger和CGFloat,或者你并不直接拥有的类型,比如delegates。

 

readonly关键字代表setter不会被生成, 所以它不可以和 copy/retain/assign组合使用。

atomicity的默认值是atomic,读取函数为原子操作。

2.没有property和有property的对比

在头文件定义 obj。在.m文件中使用

 

 

 

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
    NSObject *obj;
}
@end
- (void)viewDidLoad
{
    [super viewDidLoad];    
    self.obj = nil;、
}

提示不可用。

 


加上property

 

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
    NSObject *obj;
}
@property (nonatomic,retain) NSObject *obj;
@end

编译能通过,运行,崩溃,提示错误 reason: '-[ViewController setObj:]: unrecognized selector sent to instance 0x6b6c480

 

 

那就是我们没事实现setter方法。

用@synthesize关键字实现getter 和setter。

在.m文件中

 

 

 

@implementation ViewController
@synthesize obj;
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.obj = nil;
}

运行,程序运行正常。说明setter 起作用了。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值