黑马程序员——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是把分配内存和初始化的工作一起完成了,先分配内存,然后调用类的构造函数。




相关文章推荐

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

———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!———— 本节内容,OC多个参数方法,匿名类,自定义对象初始化方法...

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

匿名类与self/super关键字的介绍与使用

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

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

黑马程序员——OC基础---类方法的总结

黑马程序员——OC基础---类方法的总结 ------- android培训、java培训、期待与您交流! ----------...

黑马程序员—OC学习笔记—类方法与实例方法解析

———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!———— 本节内容,类方法与实例方法解析,以及他们间相互调用。...

黑马程序员——入学Blog03----OC的self,super,类方法与对象方法

先看一个Java的例子 package com.think.test; public class Test { private int number; public void setNumber...

黑马程序员——OC基础学习(二)---对象方法和类方法的学习知识总结

对象方法学习总结 类方法学习总结

黑马程序员——OC中的类方法和对象方法

//-[Calculator subWithNumber1:andNumber2:]: unrecognized selector sent to instance 0x100201c20  出现原...

黑马程序员——OC语言------set和get方法(封装)、类方法、self关键字

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- set和get方法(封装)   一、适用场合 为避免成员被随意赋值,方便访问,使用set方法和...
  • casono1
  • casono1
  • 2015年03月19日 17:25
  • 366

黑马程序员----2015.6.16笔记(多态,接口,Object,内部类,匿名类,异常,throws)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.多态:可以理解为事物存在的多种体现形态             a.多态的体现      ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——OC—类方法及匿名类
举报原因:
原因补充:

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