首页 > 其他 > 详细

iOS category中的所谓属性 和 从xib初始化对象的方法

时间:2014-01-28 19:36:34      阅读:499      评论:0      收藏:0      [点我收藏+]

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

bubuko.com,布布扣
@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
bubuko.com,布布扣

在学习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类成员变量无关!所以,这样写仅仅是一种简单声明的方法。

 

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

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

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

bubuko.com,布布扣

请注意右边的user defined runtime attributes .这样就达到了目的!

iOS category中的所谓属性 和 从xib初始化对象的方法

原文:http://www.cnblogs.com/breezemist/p/3535423.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!