【iOS系列】-oc中特有的语法

oc数据类型:

 1,基本类型
2,对象类型
3,id
4,BOOL
5,block
6,SEL

1:category

使用继承关系来扩充一个类,有一个弊病,高耦合性

category(分类,类别)

能够帮我们扩充一个类的功能

1,只要是在原类中生成的成员变量都可以在分类中直接访问,不能在分类中生成员变量

2,如果分类中定义实现了与原类中相同的方法,那么原类中的方法相当于被覆盖掉了。

注:在实际的开发中,最好不要出现方法覆盖

//指向函数的指针
void test()
{
NSLog(@"test");
}
void (*myTest)() = test;
myTest();

2:block 指向函数的指针比较像

block就是弥补了 指向函数的指针,不能够直接保存一个函数体(代码块)

//定义(无返回值)
void (^myBlock)() = ^{
NSLog(@"test");
};
//调用
myBlock(); //定义(有返回值)
int (^sumBlock)(int a, int b) = ^int (int a, int b) { return a + b;
};
//调用
int result = sumBlock(10,20);

注:如果想要改变,block代码块之外的变量值,就必须在变量前加入 __block关键字

3:protocol(协议)

意思同:java中的接口

1,谁遵循协议,谁就要实现协议中定义的方法

2,协议文件本身只是提供方法的声明,并不实现方法

3,协议本身也可以遵循其他协议,NSObject是一个基础协议,协议也可以同时遵循多个其他协议

4,父类遵循了那些协议,子类同样遵循那些协议

5,一个类可以同时遵循多个协议

@required//下面的方法,必须实现,默认都是必须实现的

@optional //下面的方法,可选实现

4:SEL:包装方法

- (void)test1;
- (void)test2:(NSString *)n;
- (NSString *)test3; //无参数
[t test1];
//使用@selector就能够把一个方法包装成 SEL数据类型
SEL s1 = @selector(test1);
//包装后的方法的执行
[p performSelector:s1];
//或者这样调用,更为常用一些
[p performSelector:@selector(test1)]; //带参数
SEL s2 = @selector(test2:); [p performSelector:s2 withObject:@"135047654"]; //带返回值
SEL s3 = @selector(test3); NSString * str = [p performSelector:s3];

【iOS系列】-oc中特有的语法的更多相关文章

  1. OC中的点语法,成员变量的作用域

    点语法 点语法本质是函数的调用,不是像java中那样,是用来访问成员变量的:oc中访问成员变量是用 -> 访问的: Person *p = [Person new]; p.age = 10; / ...

  2. OC中的面向对象语法

    一. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 打开电脑 播放电 ...

  3. OC中的面向对象语法3

    一. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西 ...

  4. iOS:在OC中调用JS脚本

    示例一:在webView中调用js脚本进行搜索 1.首先导入JavaScriptCore.framework这个框架 2.创建webView.设置代理.请求手机端百度 #import "Vi ...

  5. OC中的面向对象语法4

    一. 继承 1. 继承的基本用法 l 设计两个类Bird.Dog // Bird的声明 @interface Bird : NSObject { @public int weight; } - (vo ...

  6. iOS开发-OC中TabView的编辑

    UITableView编辑 1> UITableView 编辑流程 2> UITableView 编辑步骤(四步) ① 第一步 : 让 TableView 处于编辑状态(在按钮点击事件方法 ...

  7. 【iOS系列】-oc中的集合类

    OC中的集合有:NSArray 数组 NSDictionary 字典 NSSet 集合 第一:NSArrary 1.1:集合的基本方法 //1.创建集合 //NSArray 是不可变数组,一旦创建完成 ...

  8. iOS开发几年了,你清楚OC中的这些东西么!!!?

    iOS开发几年了,你清楚OC中的这些东西么!!!? 前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1 ...

  9. iOS开发几年了,你清楚OC中的这些东西么1

    前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS ...

随机推荐

  1. 使用Docker compose编排Laravel应用

    前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...

  2. 条款28:避免返回handles指向对象内部的成分(Avoid returning "handles" to objects internals)

    NOTE: 1.避免返回handles(包括references 指针 迭代器)指向对象内部.遵守这个条款可增加分装性,帮助const 成员函数的行为像个const,并将发生“虚吊号码牌”(dangl ...

  3. 基于selenium爬取拉勾网职位信息

    1.selenium Selenium 本是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖 ...

  4. k fit in Park Model

    software: Gnuplot input: area_averaged_axial_mean_velocity_TI_1.txt # One Rotor, front, eldad blade ...

  5. 如何设置目标并发(或者目标RPS)?

    基本概念 首先您需要了解什么是并发用户.TPS 和它们之间的关系. 并发用户:指的是现实系统中同时操作业务的用户,在性能测试工具中一般称为虚拟用户(Virutal User).一般是站在客户侧评估的角 ...

  6. codeforces 315B

    #include<stdio.h> int main() { int n,k,i,flag=0; while(scanf("%d%d",&n,&k)!= ...

  7. 虫食算(codevs 1064)

    题目描述 Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045    +    8468#6 ...

  8. iOS-bug·Failed to connect to github-production-release-asset-2e65be.s3.amazonaws.com port 443: Operation time out

    在首次运行 react naticve 项目时, 遇到了如下的问题: Failed to connect to github-production-release-asset-2e65be.s3.am ...

  9. IText 生成pdf,处理table cell列跨页缺失的问题

    /**     * 创建(table)PDF,处理cell 跨页处理     * @param savePath(需要保存的pdf路径)     * @param pmbs (数据库查询的数据)    ...

  10. Treasure Hunt--poj1066(最短路加判断线段的关系)

    http://poj.org/problem?id=1066 题目大意:有n条线段 他们都在这个房间里   最后有一个点代表起始位置 现在想通过墙出去  他只能爆破每个房间的中点的门   问最少的门通 ...