美文网首页ios
如何为Objective-C添加类属性

如何为Objective-C添加类属性

作者: lkkwxy | 来源:发表于2016-08-21 18:07 被阅读273次

    我们都知道在swift中很容易就能为一个类添加一个类属性,就像这样<code>public static var name:String?</code>,可在OC中我们应该怎么为一个类添加类属性呢?
    我们可以在属性的描述词里添加一个class的描述,如下所示
    <pre>
    @interface SPCustomType : NSObject
    //在这添加了一个class,代表着这是一个类属性
    @property (nonatomic,copy,class)NSString *name;
    @property (nonatomic,assign,class)NSInteger count;
    @end</pre>但是值得注意的是,Xcode并不会为我们自动生成一个对应的类变量,也就是说<code>@property (nonatomic,copy,class)NSString *name;</code>相当于写成这样<code>+ (NSString *)name;+ (void)setName:(NSString *)name;</code>,有一个+号的getter和一个+号setter方法,所以我们需要去实现这2个类方法。
    <pre>@implementation SPCustomType
    static NSString *_name;
    static NSInteger _count;
    <code>+</code> (NSString *)name{
    return _name;
    }
    <code>+</code> (void)setName:(NSString *)name{
    _name = name;
    }
    <code>+</code> (NSInteger)count{
    return _count;
    }
    <code>+</code> (void)setCount:(NSInteger)count{
    _count = count;
    }
    @end</pre>接下来我们就可以用类属性了。例如<pre>SPCustomType.count++;
    NSLog(@"%ld",(long)SPCustomType.count);//打印结果是1
    SPCustomType.name = @"testName";
    NSLog(@"%@",SPCustomType.name);//打印结果是testName</pre>有的人会有疑问,既然加上<code>class</code>这个描述词之后,仅仅相当于生成了+号getter和setter方法的声明,那为什么我们能通过点语法进行调用呢?
    其实点语法并不是去访问成员变量,而是方法的调用。<code>ClassA.test</code>相当于<code>[ClassA test]</code>,<code>ClassA.test=@"test"</code>相当于<code>[ClassA setTest:"test"]</code>ClassA既可以是一个对象也可以是一个类.简单测试如下
    <pre>
    //声明
    @interface SPDotTestClass : NSObject
    <code>+</code> (void)sayHello;
    <code>+</code> (void)setName:(NSString *)name;
    @end
    //实现
    @implementation SPDotTestClass
    <code>+</code> (void)sayHello{
    NSLog(@"sayHello");
    }
    <code>+</code> (void)setName:(NSString *)name{
    NSLog(@"hello %@",name);
    }
    @end
    //测试代码
    SPDotTestClass.sayHello;//此处打印sayHello
    SPDotTestClass.name = @"lkk";//此处打印hello lkk
    </code></pre>还有更简单的证明,就是我们经常用的<code>[UIApplication sharedApplication];</code>也可以写成<code>IApplication.sharedApplication;</code>当然不建议这么去写。
    在回到上面为OC添加类属性上,并不是真正的为一个类添加了类属性,只是看起来好像有了个类属性。

    相关文章

      网友评论

        本文标题:如何为Objective-C添加类属性

        本文链接:https://www.haomeiwen.com/subject/gacysttx.html