黑马程序员技术交流社区
标题:
OC 加强
[打印本页]
作者:
jeffdy66
时间:
2015-11-23 23:42
标题:
OC 加强
1.分类的概念及作用
category是OC特有的语法,其他语言没有的语法
category 有很多种翻译:分类\类别\类目(一般叫分类)
2.分类的作用
在不修改原有类的基础上增加新的方法
一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作.
3.使用分类的步骤
先声明分类 ->>实现分类->>使用分类中的方法
注意:类别的命名规则:类名+扩展方法,如"NSString+countNum"
4.分类使用的注意事项:
在分类的声明中不能声明实例变量
不能定义实例变量也不能使用@property
在分类的方法中,可以访问类中的实例变量
5.声明类别格式:
a.新添加的方法必须写在@interface与@end之间
b.ClassName现有的类名(要为哪个类扩展方法)
c.CategoryName 待声明的类别名称
d.NewMethod新添加的方法
注意:不允许在声明类别的时候定义变量
6.实现类别格式
a.新方法的实现必须写在@implementation与@end之间
b.ClassName现有类的类名
c.CategoryName 待声明的类别名称
d.NewMethod 新添加的方法的实现
7.非正式协议的概念
非正式协议就是给NSObject类创建的类目(分类)又叫做非正式协议,非正式协议一般不需要进行实现,一般在子类中进行方法的重写.
所谓非正式协议就是类别,即凡是NSObject或其子类的类别,都是非正式协议.//面试题.
// 计算字符串长度.
NSString *str=@"abc12sdfsdfjl234l5";"
8.类延展的概念
延展类别又称为扩展(Extendsion)
延展,延展类别,扩展,这几个是一个概念.
这种写法的类别叫匿名类别,又叫类扩展,所谓的扩展其实就是为一个类添加额外的原来没有的变量,方法或者合成属性. // 面试会问
9.block的基本概念
block对象包含着一组状态数据,这些数据在程序执行时用于对行为产生影响.
10.block的基本用法
a.block最简单形式 定义格式:
void (^block名) ( ) =^{代码块;}
void (^myBlock)( )=^ {
NSLog(@" hello");
}
#import <Foundation/Foundation.h>
void (^myBlock4) ( )=^( ) {
NSLog(@"xxxx");
printf("xxxxx") //无参无返回值
};
myBlock( ); // 使用block变量
// 第二种格式: 有参无参返回值
void (^myblock2) (int, int)=^ (int a, int b){
NSLog(@"a+b=%d",a+b);
};
myblock(34,12);
// 第三种格式: 有参有返回值类型
返回值类型(^变量名) (参数类型及个数)=^(形参列表){
代码块语句;
return;
};
int (^myblock1) (int, int) =^(int x ,int y){
return x+y;
};
// 给变量重新赋值
myblock1=^(int x ,int y) {
return x*y;
};
sum=myblock (10,20) ;
NSLog(@"sum=%d",sum);
11.函数指针回顾 block的typedef
格式: typedef 返回值类型 (^block变量名) (参数类型列表);
Typedef int (^MyBlock) (int ,int);
void (^myBlock) ( )=^{
NSLog(@"helloworld");
};
myBlock( );
typedef void (^Block)( ); // 给无返回值无参数的block起别名
b1=^{
NSLog(@"helloworld");
};
b1( );
typedef int (^NewType1) (int ,int);
NewType1 nt1 =^(int a,int b){
return a+b; // 给有参有返回值的block起别名!
};
int s=nt1(12,23);
NSLog(@"s=%d",s);
}
return 0;
如果用__block修饰之后,后面访问的就是堆区,并且在block中可以修改,
如果不用 __block修饰,后面访问的就是栈区.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2