为了账号安全,请及时绑定邮箱和手机立即绑定

Objective-C 中下列类属性的写法有何不同?

Objective-C 中下列类属性的写法有何不同?

慕尼黑8549860 2019-04-23 15:18:44
1.在.h文件中,例如:@interfacePullToRefreshView:UIView{ UILabel*lastUpdatedLabel; UILabel*statusLabel; CALayer*arrowImage; UIActivityIndicatorView*activityView;}2.在.h文件中,例如:@property(nonatomic,strong)UIScrollView*scrollView;3.在.m文件中,例如:@interfacePullToRefreshView@property(nonatomic,strong)NSArray*titles;@end4.在.m文件中,例如:@implementationTopicListViewController{PullToRefreshView*pull}简而言之,是否是1.在头文件中的是public属性,在.m中的是private属性?2.在@interface和@implementation中用大括号扩起来的和@property有何区别?(除了synthesize方面)3.一般情况下应该如何写?
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

假设不考虑使用@private声明变量的这种特殊方式,在object-c里面,只要是声明了的变量和属性都可以在包含了这个声明的.m文件里使用。所有东西都public当然不太符合面向对象设计里面的封装性啦,那些直接写在.m里面的变量和属性就是为做到信息隐藏,保证封装性,这种手法的官方名称叫Category,算是编写object-clib的必备手法了。因此,针对所有问题的答案:都是public的,只不过.m文件无法#import,间接的实现了private大括号括起来的是instancevariable(实例变量),只是简单的数值,不能绑定get/set方法,不能自动retain/copy/atomic,就相当于一个简单的跟着instance走的局部变量;property则是对get/set方法的语法封装(所谓的语法糖),将两个方法声明变成一个property声明,并且通过标注各种attribute帮你完成许多基本任务。我见过一些lib的写法是将暴露给外部的声明写在Foo.h里面,然后不想暴露给外部的写在Foo+Internal.h里面,通过这种约定告诉调用者,不要使用我内部的变量、属性和方法。个人比较喜欢这种做法。
                            
查看完整回答
反对 回复 2019-04-23
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

直接写在{}里面的是实例变量,前面写上@property的是属性。对于属性来说,obj-c会自动给生成一个实例变量,然后在访问属性时(用get/set方法或者用obj.attr)会用到这个自动生成的实例变量并做一些其他额外的事情。
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 387 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信