objective-c,三类与对象的方法调用

  在objective-c中,关于类同java有相似的地方,就是也包括成员变量和方法,虽然在叫法上不太一样。但是表达的却是一个意思。创建一个类一般直接创建一个.m文件即可。普通情况下都是有模版自动生成。至于不同是在与方法方法上。

  方法修饰词:extern;

  说到上面的关键字。想到于public的意思。也就是别的类只要倒入了这个类,就可以调用这个类方法。而如果没有写,在其他类中调用是糟糕的。也就是不安全的不规范的。 但是在是测试的时候没有发现警告或者报错,所以简单记一下即可。

  先来说一下一个正常的项目文件。一个类功能需要两个文件组成:.h,.m文件组成。h文件时接口文件,而m文件相当于实现文件。

  在类的概念上有成员变量的说法。成员变量的声明需要写在.h的继承后面的大括号内:如下

  #import <Foundation/Foundation.h>

  @interface demo:NSObject{

      int temp;

  }

  @end

  上面的temp变量就是成员变量的声明,但是在oc中不推荐直接使用成员变量,大部分情况都使用的是属性,如下

  @property (nonatomic,assign) int *temp;

  上面的语法是指创建一个属性,这个属性来真正替代成员变量。有点类似于get/set方法;

  • assign //简单赋值,主要用于基本数据类型
  • copy //创建一个新的对象,新的对象和旧对象是独立的两个对象
  • retain //将对象计数器加1
  • readonly //表示只读属性 只会生成getter方法 不会生成setter方法
  • readwrite //默认值,表求生成setter和getter方法
  • nonatomic //非原子访问,不加同步 ,多线程并发访问提高性能 (对多线程的保护,防止在未写完,被另一个线程读取,造成数据错误)

  上面只要设置了@property属性。在实现类中就可以直接使用get/set方法。而无需手动创建,只需要在实现类中使用@synthesize标签即可

  #import "xing_unit.h"

  @implementation xing_unit

  @synthesize flag;or@dynamic flag;

  @end

  上面需要说明的是,如果使用@synthesize标签会自动创建get/set方法。但是如果使用的是@dynamic标签。则需要手动创建对应的get/set方法

  在使用get/set方法时。如下:注意在使用时时对象名,也就是说使用get/set方法必须先实例化对象。

  get [对象名 变量名];

  set [对象名 set变量名];

  关于对象和类的概念,类有可能主要针对的面向过程编程,可以当成工具类的功能,而对象则不同,于java相同。但是在调用方法的时候不同。

  在使用类方法时有两种写法。

  方法1:

  int getNum(int num);

  调用:

  int tmep = getNum(12);

  方法2:

  +(int) getNum:(int)num;

  调用:

  int temp = [类名 getNum:12];

  以上的两种方法都是类方法的写法。但是在调用的时候有区别。具体目前没有查到有什么效率问题。可以使用。

  对象方法写法如下:

  -(int) getNum:(int)num;  

  调用:

  int temp= [对象名 getNum:12];

  在oc类中,与java不同。oc中的方法分为类方法和对象方法,编写上在于方法签名的开头使用+/—符号来进行区分,如果换成java,类方法类似于java中的静态方法,即在不实例化类的情况下也能调用。而对象方法则根java中的普通方法一致,实例化后才能使用。

  在使用中也可以使用电标记。即使用

  对象.属性名

  这样的使用有点类似于java直接方法成员变量。所以java使用了private来私有化。在oc中没有。虽然可以使用点标记来访问。但是最好不要使用。