Objective-C——类、方法、属性、成员变量

来源:互联网 发布:局域网行为控制软件 编辑:程序博客网 时间:2024/05/22 12:21

      有过相关编程语言基础,了解C++/java的相信对类的类、对象等概念是了解的。在此我也不做过多地赘述。

     关于OC中类的定义及方法使用这块,OC定义了一套自己的规范

类的定义:      

 @interface FirstClass :NSObject

   @end

  //@interface表示声明的是一个类,“:”表示继承关系,@end类的结束

类的实现

   @implementation FirstClass

   @end

方法的声明:

   +(void)print;

   -(id)init;

   //"+"表示声明的是一个类方法,由雷鸣调用

   //“-”表示声明的时实例方法,必须由类的对象来调用

   //不带参数的方法在调用时,会使用隐藏的self参数来访问实例变量的属性。

声明带参数的方法:

   +(void)initWithName:(类型) 变量名and:(类型) 变量名 A:(类型) 变量名;

   OC中带参数的方法声明比较怪异,红色部分均为方法名,:表示后面跟的是参数。也即该方法的实际名称是initWithNAme:and:A:


方法的调用:

    

[FirstClass print];//通过类名调用类方法FirstClass *node=[FirstClass alloc]init];//生成FirstClass的对象
[node initWithName:@"codebat" andAge:21];//调用参数的函数

                                                                               

属性与变量

属性是oc语言的一个新的机制,要求我们必须声明与之对应的实例变量。

成员变量的声明:

@interface FirstClass : NSObject{    //类的成员变量,默认访问权限为protect    int m;    double n;    char c;    float f;}
//成员变量在{}中定义,一旦声明后可以在本类的实现文件.m文件中直接使用,相当于这个类里面的全局变量。对成员变量的赋值不需要用到self等对象来调用,这点与java中成员变量的赋值方式有别。在允许被其他类访问的情况下,在其他类中访问这个成员变量时应该用这个类的对象(指针)来访问。

属性
//成员变量在{}中定义,一旦声明后可以在本类的实现文件.m文件中直接使用,相当于这个类里面的全局变量
在声明部分使用@property定义属性
   @property(参数)类型 变量名;
   @property(nonatomic,strong);//非基本类型用strong
   @property(nonatomic,assign);//基本类型assign
在实现部分使用@synthesize合成属性
   @synthesize 变量名;
   @synthesize name=_name;//_name是name的一个实例
参数:
读写属性:readwrite/readonly
内存属性:assign/retain/copy/strong,copy是内容拷贝,retain是指针拷贝
原子属性:atomic/noatomic,nonatomic禁止多线程,变量保护提高性能

OC中的四种访问权限控制符
      @protected,保护实例变量只能被该类及该类的子类中定义的方法访问;
      @private,保护实例变量只能被该类中的方法访问;
      @public,该修饰符后面的变量可以被所有类或模块定义的方法直接访问。
      @package,修饰符后的成员变量可以在相同映像的其他程序中访问。
编译器把@private限制的成员变量所在的类、其他类和函数编译成一个框架后,那么这些类、函数都在同一个映像中,此时这些类和函数都可以自由访问这个@package限制的成员变量。

1 0