【iOS系列】-oc中特有的语法
【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中特有的语法的更多相关文章
- OC中的点语法,成员变量的作用域
点语法 点语法本质是函数的调用,不是像java中那样,是用来访问成员变量的:oc中访问成员变量是用 -> 访问的: Person *p = [Person new]; p.age = 10; / ...
- OC中的面向对象语法
一. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 打开电脑 播放电 ...
- OC中的面向对象语法3
一. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西 ...
- iOS:在OC中调用JS脚本
示例一:在webView中调用js脚本进行搜索 1.首先导入JavaScriptCore.framework这个框架 2.创建webView.设置代理.请求手机端百度 #import "Vi ...
- OC中的面向对象语法4
一. 继承 1. 继承的基本用法 l 设计两个类Bird.Dog // Bird的声明 @interface Bird : NSObject { @public int weight; } - (vo ...
- iOS开发-OC中TabView的编辑
UITableView编辑 1> UITableView 编辑流程 2> UITableView 编辑步骤(四步) ① 第一步 : 让 TableView 处于编辑状态(在按钮点击事件方法 ...
- 【iOS系列】-oc中的集合类
OC中的集合有:NSArray 数组 NSDictionary 字典 NSSet 集合 第一:NSArrary 1.1:集合的基本方法 //1.创建集合 //NSArray 是不可变数组,一旦创建完成 ...
- iOS开发几年了,你清楚OC中的这些东西么!!!?
iOS开发几年了,你清楚OC中的这些东西么!!!? 前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1 ...
- iOS开发几年了,你清楚OC中的这些东西么1
前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS ...
随机推荐
- Python3使用PyMySQL操作数据库
1. 安装PyMySQL pip install PyMySQL 关于PyMySQL的详细内容可以查看官方文档 Github 2. 创建表 在某个数据库内,使用以下指令建表 CREATE TABLE ...
- PHP基于phpqrcode类生成二维码的方法详解
前期准备: 1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是 ...
- 3 SQL 聚合与排序
3 聚合与排序 3-1 对表进行聚合查询 聚合函数 通过SQL对数据进行 操作或计算时需要使用函数. 计算表中全部数据行数时,可以使用COUNT函数. COUNT : 计算表中的记录数(行数). SU ...
- java指令详解
Java是通过java虚拟机来装载和执行编译文件(class文件)的,java虚拟机通过命令java option 来启动,-option为虚拟机参数,通过这些参数可对虚拟机的运行状态进行调整. 一. ...
- python:零散记录
1.rstrip()删除末尾指定字符串 例如:A = '1,2,3,4,5,' B = A.rstrip(',') B = '1,2,3,4,5' 2.isdigit()方法 Python isdig ...
- python 装饰器模拟京东登陆
要求: 1.三个页面:主页面(home).书店(book).金融页面(finance)2.有两种登陆方式:主页面和书店页面使用京东账户登陆,金融页面使用微信账户登录2.输入:1 ,进入主页面,以此类推 ...
- MySQL之federated
由于夸服务器查询的限制,federated能够使得所有的表像是在同一台服务器上查询 (show engines-->no-->在my.ini里面添加fedrated) 经过测试,在开启fe ...
- POJ 1985 Cow Marathon【树的直径】
题目大意:给你一棵树,要你求树的直径的长度 思路:随便找个点bfs出最长的点,那个点一定是一条直径的起点,再从那个点BFS出最长点即可 以下研究了半天才敢交,1.这题的输入格式遵照poj1984,其实 ...
- 微软2016校园招聘在线笔试 B Professor Q's Software [ 拓扑图dp ]
传送门 题目2 : Professor Q's Software 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Professor Q develops a new s ...
- ubuntu 配置 samba, win7 map network device from linux
一. samba的安装: # sudo apt-get insall samba # sudo apt-get install smbfs 二. 创建共享目录,或是找已经存在的文件夹,只要权限放开就行 ...