黑马程序员——OC—类方法及匿名类

原创 2015年07月08日 11:45:39

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———

类方法及匿名类

1、类方法概述

实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例。

而类方法,比较起来,也就是说,不需要你创建一个实例。

+表示类方法,就是类调用方法,不依赖于任何对象的方法。

-表示是实例(对象)方法,只能是对象可调用,依赖与于何对象的方法。



2、类方法的调用

[类名称  类方法名称];


3、类方法使用注意事项:

1)类方法可以和实例方法同名,这个并不影响使用,实例方法由实例对象访问调用,类方法要通过类来访问调用,不会有交叉相互影响。




2)类方法也可以是从父类继承而来,子类可以重写类方法,如description类方法就可以在子类里重新定义这个方法。

3)类方法和实例方法一样在interface里声明,在implementation里实现。

4)类方法智能被向类发送类方法消息才被执行,向实例对象发送类方法是不能被触发执行的。

5)在类方法里使用了self,这个self执行的类对象class Object而不是实例对象instance Object。


4、类方法的优点

1)节省内存空间

2)提高了效率

3)作为工具方法


5、类方法的易犯错误


1)在类方法中使用了类的成员变量



6、类方法与对象方法比较


1)对象方法:

以-号开头

可以使用成员变量

用对象调用对象方法

对象方法可以调用当前对象或者其他对象的方法(是通过将对象作为参数传入方法)如下


调用当前对象的其他方法:


调用其他对象的方法



对象方法可以调用类方法



2)类方法

以+开头

不可以使用成员变量

用类名调用类方法



类方法可以调用对象方法(是通过将对象作为参数传入方法)和类方法


类方法不可以调用自身,会造成死循环



同名方法的区别:

通过同名方法前面的+ - 号区分



7、OC类方法应用场景

如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法

@interface  Calculator :NSObject

{

    int _result;

    int _num1;

    int _num2;

}

//声明一个类方法用于计算两个数的和

+(int )sumNum1:(int )num1  andNum2:(int )num2;

@end


@implementation Calculator

 //通过类方法计算两个数的和

+(int )sumNum1: (int )num1  andNum2:(int )num2  {

   return num1 + num2;

}

@end


8、匿名类的概念


定义如下类:

#pragma mark 车类的声明

@interface Car :NSObject

{

   @public

   int  _color;

}

- (void)run;  //车启动

- (void)stop; //车停止

@end

#pragma mark 车类的实现

@implementation Car

//车启动

- (void)run{

NSLog(@“Car Start! color:%d”, _color);

}

//车停止

- (void)stop{

NSLog(@“Car Stop!”);

}


#pragma  mark  人类的声明

@interface Person :NSObject

{

NSString * _name ;

int _age;

}

//人开车回家

- (void)goHome:(Car *)car;

@end

#pragma mark  人类的实现

@implementation Person

- (void)goHome:(Car *)car{

//车启动了

[car run];

}

@end


9、匿名类访问变量


发现虽然我们给_color进行赋值了,但是打印出来以后还是0,

原因如下:


10、匿名类调用方法


11、匿名类作为方法的参数

1)匿名类作为方法的参数


2)匿名类优缺点

优点:可以简化代码,方便方法调用

缺点:匿名对象实例化以后,只能正确的使用成员变量一次

常见用法:

//下面两句的作用是等价的

Person *p = [[Person alloc] init];

Person *p1 = [Person new];

两者的区别:

alloc 和 init 分别把分配内存和初始化的工作分开。这样更加的灵活,可以自行初始化对象的成员变量值

而不像new每次都初始化为0

new是把分配内存和初始化的工作一起完成了,先分配内存,然后调用类的构造函数。




java内部类面试题接口编程题

1、内部类的形式是怎样的? ⒈静态内部类 ⒉成员内部类 ⒊局部内部类 ⒋匿名内部类 2、为什么要有“内部类”? 1、内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。 ...
  • Bubble1210
  • Bubble1210
  • 2016年02月24日 21:28
  • 1961

黑马程序员——Java基础测试题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员——Java基础测试题 第1题:以下代码哪个是正确的?为什么?   a. byte...
  • liu007004
  • liu007004
  • 2015年01月16日 12:49
  • 1364

Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动) 显...
  • cws1214
  • cws1214
  • 2016年07月28日 15:44
  • 5021

黑马程序员——OC学习——类方法和匿名类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1. 类方法概述 OC中可以声明两种类型的方法:实例方法和类方法。在调用一个实例方法时必须先创建...
  • Susie_lv
  • Susie_lv
  • 2015年11月30日 18:17
  • 562

黑马程序员—OC学习笔记—多个参数方法,匿名类,自定义对象初始化方法

———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!———— 本节内容,OC多个参数方法,匿名类,自定义对象初始化方法...
  • tigerleis
  • tigerleis
  • 2015年03月30日 10:57
  • 265

黑马程序员--OC自学笔记---03类方法、匿名类、封装、关系、重载、static

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------   1.   类方法 1)        概述:类方法不需要你创建一个实例。 ...
  • biangabiang
  • biangabiang
  • 2015年12月28日 21:44
  • 302

黑马程序员——Objective-C语言知识整理——匿名类与self/super关键字

匿名类与self/super关键字的介绍与使用
  • geek_1993
  • geek_1993
  • 2015年07月01日 18:53
  • 251

【OC语言】第三篇·类方法的使用、匿名类以及封装

一、类方法    1. 概述:       1)实例方法就是一个方法,它在类的是实例范围内执行。即:在调用实例方法前,必须创建一个类的实例。      2)类方法不需要创建实例。      3)+表示...
  • WackoSix
  • WackoSix
  • 2015年08月17日 08:08
  • 454

黑马程序员—OC—类方法 && self

------- android培训、ios培训、期待与您交流! ---------- *** 类方法 *** 声明和实现: @interface Person : NSObj...
  • nsygwbd1234
  • nsygwbd1234
  • 2014年09月12日 00:05
  • 216

黑马程序员——OC类方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1、类方法概述            实例方法就是一个方法,它在类的一个具体实例的范围...
  • Anne_lov
  • Anne_lov
  • 2015年08月01日 11:29
  • 154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——OC—类方法及匿名类
举报原因:
原因补充:

(最多只允许输入30个字)