今天在编码时遇到以下代码

@interface UITextField (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end @implementation UITextField (TCCustomFont) - (NSString *)fontName {
return self.font.fontName;
} - (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
} @end

在学习oc开始阶段就学过:类别不能像类中加成员变量,那么这个 fontName是不是违反了这个规则呢?

其实没有! @property 的作用就是声明方法,与成员变量无关,当你写了@property (nonatomic, copy) NSString* fontName; 系统会自动把它翻译成- (NSString *)fontName 和- (void)setFontName:(NSString *)fontName 2个方法,并没有指定这2个方法的实现。只有你用了系统的@synthesize 来实现get 和set方法,系统才会自动为你建立与之相应的类成员变量,但是,如果你自己实现了自己的 get 和set的方法,那么这2个操作就和成员变量无关了,所以说类别还是无法向原来的类中添加成员变量的。比如上面的代码,get 和 set 的操作都和fontName类成员变量无关!所以,这样写仅仅是一种简单声明的方法。另外需要注意,xcode4.5版本如果你不写@synthesize 编译器会为你自动添加的,所以想实现自己的方法一定要重写get和set方法。

利用这这种特性,可以实现另一种初始化xib的方法,比如我想在ViewController类从xib初始化时调用nslog出入一段文字,那么可以在ViewController中添加如下代码

- (void)setFontName:(NSString *)fontName {
NSLog(@"........");
}

之后,在xib中设置,如下图

请注意右边的user defined runtime attributes .这样就达到了目的!从xib编辑器看,这个设定好像是设定了对象的属性,但是我们仅仅是想借此调用一个自己的初始化函数而已。

另外,需要提一下类似于category的特性,class extension

class extension 就是以下写法

@interface MasterViewController ()
- (void)updateTableContents;
- (void)sortByValue;
@end

这种class extension和普通的category有什么区别呢?

So how is this different from a regular category? First, the compiler will check to make sure that these methods are actually implemented in the @implementation section of the class (and throw a warning otherwise) – something it doesn’t do for categories. Second, you can declare properties inside a class extension.Besides properties, it is also possible to put instance variables in the class extension.

简单的来说,就是class extension可以含有成员变量。比如:

@interface ViewController ()
{
NSString * testName;
} @property (strong,nonatomic) NSString *name2; @end

这里testName就是新加入的成员变量。

iOS category中的所谓属性 和 从xib初始化对象的方法 以及类扩展的更多相关文章

  1. IOS开发中UI编写方式——code vs. xib vs.StoryBoard

    最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关 ...

  2. Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写

    转自:https://www.jianshu.com/p/310e89ee762d 在Struts2框架中,我们知道基本的Action标签只能实现一个url请求对应一个Action处理类.那么我们如果 ...

  3. C#中关闭子窗口而不释放子窗口对象的方法

    1 在主窗口中实例化子窗口 在主窗口中实例化子窗口,而不是在按钮中实例化子窗口对象. Form2 f2 = new Form2(); 2 通过按钮来显示主窗口 在按钮中需要实现的是窗口的显示 priv ...

  4. [转]iOS开发中@property的属性weak nonatomic strong readonly等介绍

    转载地址: http://www.lvtao.net/ios/504.html @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后 ...

  5. iOS开发中@property的属性weak nonatomic strong readonly等介绍

    @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后的版本,@synthesize可以省略. 1.atomic与nonatomica ...

  6. iOS开发中@property的属性weak nonatomic strong readonly等

    请看  https://www.cnblogs.com/liubeimeng/p/4244686.html

  7. C#判断数组或集合中是否含有属性值为value的对象

    /// <summary> /// 判断list中是否有某个对象的Id_srvplan为value /// </summary> /// <param name=&quo ...

  8. IOS中@property的属性weak、nonatomic、strong、readonly等介绍

    iOS开发中@property的属性weak nonatomic strong readonly等介绍 //property:属性://synthesize:综合; @property与@synthe ...

  9. iOS Category实现原理

    iOS Category实现原理 实现原理 我们不主动引入 Category 的头文件,Category 中的方法都会被添加进主类中.我们可以通过 - performSelector: 等方式 对 C ...

随机推荐

  1. java.io.FileNotFoundException:文件名、目录名或卷标语法不正确

    出现次错误的原因主要是在windows系统下创建文件需要遵循其文件名的规则.导致创建文件失败,从而提示filenotfound异常,文件未找到 Windows 中文件夹命名规则是: ① 文件名或文件夹 ...

  2. POJ2187 Beauty Contest

    Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, ea ...

  3. Vijos1459 车展 (treap)

    描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的高度h[i].主管已 ...

  4. 项目总结—jQuery EasyUI-DataGrid动态加载表头

    http://blog.csdn.net/zwk626542417/article/details/19248747 概要 在前面两篇文章中,我们已经介绍了在jQuery EasyUI-DataGri ...

  5. 浏览器查看cookie

    今天总结下,教你怎样查看一些浏览器的Cookie,比如IE.Firefox.Chrome的Cookies等.下面分块介绍,以后会关注一些没有讲到的浏览器获取Cookie的方法. 1.Firefox浏览 ...

  6. XUnit学习

    1.建立测试单元项目 2.引用XUnit.dll或者在Nuget里安装XUnit 3.安装Nuget->xUnit.net[Runner: Visual Studio] 4.打开 测试-> ...

  7. Effective Java之最佳建议

    #Effective Java之最佳建议 此书中,目前给我帮助最大的两条建议是: - 检查参数的有效性 - 不要忽略异常 ###检查参数的有效性 对于这一条,使我感同身受的原因是:在Web项目中,前期 ...

  8. 漂亮的title提示信息

    <HTML> <HEAD> <title>一种很酷的文字提示效果演示</title> <style> .tableBorder7{width ...

  9. 单机安装TFS(转载)

    一.安装操作系统:windows server 2003 + Sp2具体步骤: 1.安装windows server 2003时选用工作组(默认为workgroup).由于在工作组环境中部署,因此使用 ...

  10. Android手机 Fildder真机抓包

    Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的“进出”的数据(指co ...