iOS 协议中定义属性

在Protocol或者Category中是不可以添加属性,但是还是看到这样写的代码。

完整的属性包括成员变量和setter、getter两个方法,在Protocol或者Category中添加属性,系统无法自动为这些属性生成成员变量和方法实现,但是方法声明是有的,因此可以尝试去调用,但是实际会报错

unrecognized selector sent to instance

所以在Protocol或者Category中添加属性,实际仅仅添加了方法声明,这和一般的仅仅在协议添加方法并没有区别,仅仅看起来不同而已。

这么写的其实也就代码简洁一点,和直接声明方法是一样的。

既然系统不能为我们自动合成成员变量和方法实现,那我们自己实现setter和getter方法就可以。经常使用的self.view.height就是这样。在声明属性后,自己实现setter和getter方法,这样就可以安全的调用。注意在setter和getter并没有用到与声明的属性相匹配的成员变量,因为,那个变量还是不存在。

通过运行时的方法去关联的一个额外定义的变量,其实实际和完整意义的定义属性没什么关系,毕竟,定义属性一般认为会自动生成成员变量和setter、getter方法实现,如果都自己实现,定义属性毫无意义可以。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 还有五年的时间,希望通过自己的努力,可以实现几个目标: 1.在上海有套好点的房子,三房一厅,房子有着自己喜欢的风格...
    火蓝青年阅读 1,715评论 0 0
  • 我经常和身边的人说一段话,人是贪婪的,人是贪婪的,为什么这么说呢? 上学的时候买一双18元的球鞋我能开心好...
    方波造价阅读 3,762评论 0 0
  • 不杀生 文/江南 不杀生 哪怕一只蚊子。 我用我的血 供养你 忍受你在耳边的 啰嗦 深夜,是对话的时刻...
    坝上客阅读 1,576评论 0 0
  • 在做实验Python小实验——密码强度(见[木凛] 的笔记)过程中,因为少打了 @staticmethod,如下图...
    lucky07阅读 1,382评论 0 0

友情链接更多精彩内容