iOS类别(category)不能添加成员变量但是可以添加属性的问题
类别不需要介绍了把,网上一大堆(利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为任何类添加新的方法,包括那些没有源代码的类)。
这篇博客主要想讨论关于类别不能添加成员变量的问题。
图中是我创建的一个UIImageView的类别,名称为Network,我在给类别添加实例变量view1的时候报错了(实例变量是成员变量的一种,实例变量应该是由类定义的变量),意思是实例变量不能被放在类别中。 但是localImage是我创建的一个属性,没有报错。但是这个localImage在 .m文件中@implement UIImageView(Network)中是无法使用的,只能在@implement UIImageView里用。
图1:
上面那段话可能听不懂,为什么不能用呢?看看下面的图片(图2), 我在controller里调用了这个方法,但是打印self.localImage的时候报错了,说"localImage"这个属性不在 UIImageView类型的对象上, 有点难理解。。但是如果把下面的set/get方法取消注释再跑一遍发现看看(图3)发现self.localImage = nil, 说明类别不会自动帮属性生成get/set方法。(_localImage无法使用,说明声明属性的时候没有生成_开头的成员变量)
图2:
图3:
图4:直接报错了,所以说添加的属性不能在@implementaion UIImageView(Network) 中使用
iOS类别(category)不能添加成员变量但是可以添加属性的问题的更多相关文章
- iOS 在类别里添加成员变量的方法:objc_setAssociatedObject
今天在github上查看MJPopupViewController这个项目,发现里面用到了objc_setAssociatedObject,用来为类别添加成员变量. 我百度之后,发现有人是这样说明的: ...
- iOS类别(Category)
iOS类别(Category)与扩展(Extension) 苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最 ...
- OC-category 为什么不能添加成员变量
以下的答案是百度的,仅做记录而已: 1. 利用运行时实际上也不是添加成员变量.已编译的类的内存布局是不变的,Class就是一个结构体,里面的成员不能改变.但是通过运行时可以将一个对象或基础类型变成指定 ...
- 为什么 Category 不能增加成员变量-nonfragile
三.既然是 non-fragile ivars,为什么 Category 不能增加成员变量? 看过一些资料,理由并不是很让人信服.我觉得并不是做不到,只是现在没有做,现在不支持.我在 Opti ...
- iOS类别(Category)和扩展(Extension,匿名类)
Category在iOS在开发常用. 特别是对于系统扩展上课时间.我们不能继承系统类.直接添加到系统类方法,最大程度上体现Objective-C动态语言特征. #import @interface N ...
- mac 添加环境变量(jmeter添加至环境变量中)
Mac系统的环境变量,加载顺序为:a. /etc/profileb. /etc/pathsc. ~/.bash_profiled. ~/.bash_logine. ~/.profilef. ~/.ba ...
- iOS类别(Category)与扩展(Extension)-b
苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性. #im ...
- ios 类别(category)
定义 类别(category)是Objective-C语言的新特性,为现有的类添加新方法的方式.局限性:1.无法添加新的实例变量.2.与类本身的方法名称冲突.当名称冲突时,类别具有更高的优先级.作用: ...
- ATL向控件添加私有属性-成员变量
https://msdn.microsoft.com/zh-cn/library/cc451389(v=vs.71).aspx ------------------------------------ ...
随机推荐
- Python 发送邮件包含附件报表示例
之前需要用Python发送报表邮件,在网上找了下资料,基本上符合要求了. 相关的示例如下,懂python的人应该都知道. from email.mime.text import MIMEText fr ...
- delphi提示错误行号之Assert(断言)
一.用法:Assert(表达式)1.如果为假 Assert会产生一个EAssertionFailed异常,显示为 Assertion Failed (C:/src/unit1.pas, [size=+ ...
- DelphiXE Android自适应屏幕办法
相关资料: http://www.delphitop.com/html/FireMonkey/2658.html http://bbs.csdn.net/topics/390919460 1.Scal ...
- jquery easyui防止超出浏览器边界
var easyuiPanelOnMove=function(left,top){ if(left<0){ $(this).window('move',{ left:1 }); } if(top ...
- Redis安装与调试
Redis安装与调试 Redis安装与调试linux版本:64位CentOS 6.5 Redis版本:2.8.17 (更新到2014年10月31日) Redis官网:http://redis.io/ ...
- string中c_str()、data()、copy(p,n)函数的用法
标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str().data().copy(p,n). 1. c_str():生成一个const char*指针,指向以空 ...
- [置顶] 很荣幸被选为2013年度 CSDN博客之星评选,如果觉得我的文章可以,请投我一票!
亲爱的小伙伴们,很荣幸我被选为<2013年度CSDN博客之星候选人>,希望大家多多支持,geekguy会继续努力,为大家奉献更好的文章. 投票地址:http://vote.blog.csd ...
- python 循环
200 ? "200px" : this.width)!important;} --> 介绍 python中有两种循环,分别是for...in循环.while循环:for.. ...
- MsSQL的游标的综合运用
USE [ChiefWMS]GO/****** Object: StoredProcedure [dbo].[WMS_Check] Script Date: 04/05/2016 09:51:13 * ...
- 【Python3】SMTP发送邮件
犹豫和反复浪费了大量时间. 与朋友言 在完成一个邮件发送程序之前我根本不明白什么是邮件,哪怕已经读过廖雪峰大神的文章,没有贬低大神的意思,大神的博客已经非常的详细, 是我的眼大肚皮小毛病在作祟,由一个 ...