zoukankan      html  css  js  c++  java
  • ios学习第二天,类和属性

    类方法 

    定义:类方法是一组全局方法的组合,属于整个类,而不属于对象。

    使用:类方法只能向类发送消息,不能向对象发送。如:

              [myClass  classMethod];

              类方法还可以将消息发送给类的子类。如

              NSArray有一个类方法array,那么它的子类NSMutableArray也能接受array。

    注意: 1. 在类方法中不能使用实例变量。

    为什么要使用类方法?

    答: 1. 为对象分配内存。 alloc

            2. 在不希望每次都实现实例,可以利用类方法创建一个全局对象。

            3. 可以创建一些"工具方法"。

    (第2条和第3条我是完全没弄懂,老头子只是代过。。等弄懂了再写例子上来)

    属性

    定义:在定义一个实例变量之后,有两个基本的操作,setter  and  getter。前者是为变量设置                                         值,后者则是得到变量的值。如:有一个实例变量 int eye,

               -(void)setEye : anEye

                 {

                        eye = anEye ;

                  }

                -(int)eye

                {

                        return eye;

                }

    这两个方法有特定的命名规则:setter往往在实例变量名前加set,getter则直接使用变量名。

    也就是说,在你定义了一个实例变量之后,往往需要实现setter,getter。有没有更简单的方法来设置呢?答案是有的,object-c中增加了两个关键字:

    @property : 等效于在声明中声明 setter,getter。

    @synthesize : 等效于在实现中实现setter,getter。

    如:

    在.h文件中

    int eye;

    @property int eye;

    在 .m 文件中

    @synthesize eye ;

    这样你就可以用 点 “.“去操作eye的存储与读取。

    self.  的实质是调用setter , getter方法。如果需要多次用到self.eye,而值又不会改变,则可以先声明一个局部变量  int  eye = self.eye ;减少调用次数。

    你还可以给变量增加一些限制,如

    @property (参数1 , 参数2) int eye ;

    这里的参数主要分为三类:

    1. 读写属性 (readwrite/readonly)

    2.setter语意 (assign/retain/copy)

        1)assign : 默认类型,setter方法直接赋值,而不进行retain操作

        2)retain : setter方法对参数进行release旧值,再retain新值。

        3)copy : setter方法进行Copy操作,与retain一样,对参数进行release旧值,再retain新值。

    3.原子性 (atomicity/nonatomic)

            nonatomic : 禁止多线程,变量保护,提高性能

    这些参数的实质,就是改变了变量的setter和getter方法。

    注意:

    1。你所声明的变量,int eye; 与你所想设置属性的变量名不必一致,

          @property int P_eye ;

          你只需要@synthesize eye = P_eye ;就可以了

    2。当你在.m 中又使用了synthesize ,又写了setter,getter, 那么@synthesize将被忽略。

    3。如果你没有任何的实例变量,只有属性,那么你就必须自己在.m 中去实现setter,getter,而不能用@synthesize 。(这个是老头子说的,没怎么懂)

    为什么要使用@property ?

    答:主要是为了实例变量的安全(检查),和可继承性的考虑。

    所有的@property都要设置成public 并且在头文件中定义吗?

    答:NO!在 .m 文件中,放一个 @interface (这个是私有的) 可以实现私有化

        @interface MyObject ()

        @property int myEyesOnly ;

        @end

    这个interface只属于这个文件,他里面的所有东西都能被这个文件所访问了。需要注意的是,它里面不能放实例变量,只能放属性和方法。

    然后在implemetation 中实现。

    这里的myEyesOnly只能通过self.myEyesOnly访问。

    转自:http://appleparty.diandian.com/post/2012-05-15/18043909

  • 相关阅读:
    Python-面向对象(一)-Day7
    Python-模块使用-Day6
    Python-迭代器&生成器&装饰器&软件目录结构规范-Day5
    Python-函数-Day4
    Python-字典、集合、字符编码、文件操作整理-Day3
    Python-字符串及列表操作-Day2
    Python-基础学习-Day1
    解决安装Weblogic domain卡住问题(Primeton BPS)
    怎样在旅途中拍出好看的照片
    Weblogic启动成功,控制台打不开
  • 原文地址:https://www.cnblogs.com/zhangsheng/p/2812607.html
Copyright © 2011-2022 走看看