创建OC对象类、成员/静态变量、对象/类方法(★学习类的成员变量作用域,firecat推荐★)

文章来源:http://blog.csdn.net/jjwwmlp456/article/details/41826849

OC 面向对象

一般需要.h 和.m(或.mm 以后不赘述) 文件配合来创建类。


.h 使用@inteface 和@end ,在之间定义,变量和方法只能定义,不能初始化

下为 Student.h

@interface Student : NSObject //@interface声明。  没有@interface  只有@implementation也能定义一个类

{

@public  //作用域  任意地方

int a;

@protected  //当前及子类 

int b;

@private  //当前(包括.m),

int c;

@package //框架中都可访问,,,没用过

int d;

}

- (void) aa; //- 对象方法  调用[stu aa]

+ (void) ab; //+ 类方法    调用[Student aa] 

- (void) ac:(int)pa; //带一个int 型参数 pa    [stu ac:pa]    

- (int) ad:(int)pa  ae:(int)pb; //多个参数,可以有多个方法名   [stu ad:pa ae:pb]

+ (int) af:(int)pa:(int)pb; //多个参数,只保留第一个方法名   [stu af:pa :pb]

@end

注意:

(1)在类的接口部分定义的员变量默认情况下是@protected的;

(2)在类的实现部分定义的员变量默认情况下是@private的;

(3)类的方法没有作用域之说,在接口部分定义的方法,相当于C++的public方法。在类的实现部分定义的方法,相对于C++的private方法。

.m 使用@implementation 和 @end, 在之间定义。 变量和方法初始化的地方

下为 Student.m

#import "Student.h" 

@implementation Student

{

int x; //在类的实现部分这里定义的变量,没有修饰符,默认为私有作用域,@private。一般也是用来定义隐藏信息的。

}

- (void) aa

{

  //使用成员变量

  a = 8;

  self->c = 9; //self指代自身

}

+ (void) ab

{

  //静态方法中 不能调用成员变量

  //可以使用静态变量  

}

- (void) ac{}

- (int) ad:(int)pa  ae:(int)pb{}

+ (int) af:(int)pa:(int)pb{}

@end


静态变量

静态变量 使用的是c/c++的方式。 static 声明,只在文件oc中就是类中访问,生命周期为整个应用程序,即在下次访问时,会得到上次变化的值。

OC没有类的静态成员变量,只有类的成员方法。

static int x;

@implementation Student

//静态变量在 对象和类方法中都可使用

- (void) test1

{

  x = 3;

}

+ (void) test2:(int)value

{

  x = value;

}

@end


main.m

#import

int main()

{

  //初始化对象 先分配内存,再初始化

  Student* stu = [Student alloc];  //调用方法以[]

  stu = [stu init]; 


  //初始化对象 分配并初始化

  Student* stu1 = [[Student alloc] init]; 


  //初始化对象 使用[Class new] 

  Student* stu2 = [Student new]; //OC2.0语法 ,new 先分配 后会调用默认的构造方法,即init方法

  

  //调用public变量   @protected、@private、static变量在这都不可使用

  stu->a = 3; 

  NSLog(@"a-value=%d", a);  

 

  //调用对象方法

  [stu ac:3];


  //调用静态方法

  [Student af:pa:pb];


  //Class 对象

  Class stuClz1 = [Student class];

  Class stuClz2 = [stu class];

  //Class 对象调用静态方法  

  [stuClz1 ab];  


  return 0;

}


变量作用域

(一)变量的作用域主要分为四种:

(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。

(2)@protected (受保护的)只能在当前类和子类的对象方法中访问

(3)@private (私有的)只能在当前类的对象方法中才能直接访问

(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问

(二)使用注意和补充

1)在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在这里声明的成员变量是@private的。在.m中定义的成员变量不能和它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。

2)在@interface  @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的。

3)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。


你可能感兴趣的:(Objective-C)