Objective-C( 语法二)
分类(Category):可以给某一个类扩充一些方法(不修改原来类的代码)
作用:在不改变原来类内容基础上,可以为类增加一些方法
使用注意:
1. 只能增加方法,不能增加成员变量
2. 分类方法实现中可以访问原来类中的成员变量
3. 分类可以重新实现原来类中的方法,会覆盖原来类的方法,导致原来类的方法无法再使用
4. 分类的优先级最高:调用一个方法优先去分类中找,再去原来类,然后父类中找
分类(最后编译的优先)—》原来类—》父类
声明:
@interface 类名(分类名称)
@end
实现:
@implementation 类名
@end
类的本质:
类本身也是一个对象,是Class类型的对象,简称类对象
Class类型的定义
typedef struct objc class *Class
类名代表着类对象,每个类只有一个类对象
+load方法和+initialize方法:
1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。
2.当第一次使用某个类时,就会调用当前类的+initialize方法,一个类只会调用一次+initialize方法
3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法
description方法
使用NSLog输出属性较多时,修改默认输出,可重写+description方法或-desription方法
+description方法:
默认情况下,使用NSLog和%@输出对象时,调用对象的-desription方法,拿到的返回值(NSString *)屏幕输出结果是:<类名:内存地址>
+desription方法:
默认情况下,使用NSLog和%@输出类对象时,调用类对象的+desription方法,拿到的返回值(NSString *)屏幕输出
注意点:
不要在-desription方法中尝试使用self,会造成死循环
NSLog打印
1. %p
打印指针变量p的地址
NSLog(@"%p", &p);
打印对象地址
NSLog(@"%p", p);
2. %@
%@ 打印<类名:对象地址>
NSLog(@"%@", p);
3. _LINE_ %d 输出当前行号
4. _FILE_ %s 输出文件路径
5. _func_ %s 输出当前函数
SEL
全称selector
SEL 其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法
_cmd 代表当前方法
消息就是SEL
#import <Foundation/Foundation.h> @interface Person : NSObject + (void)test; - (void)test1;
- (void)test2:(NSString *)abc; @end @implementation Person
+ (void)test
{
NSLog(@"+test+++++++"); } - (void)test1
{
NSLog(@"-test-------");
} - (void)test2:(NSString *)abc
{
NSLog(@"test2----%@", abc); }
@end int main()
{
Person *p = [[Person alloc] init]; NSString *name = @"test1";
SEL s = NSSelectorFromString(name); [p performSelector:s]; // [Person test];
// [p test1];
// 1.把test1包装成SEL类型的数据
// 2.根据SEL数据找到对应的方法地址
// 3.根据方法地址调用对应的方法 // 间接调用test1
// [p performSelector:@selector(test1)];
// [p performSelector:@selector(test2:) withObject:@"123"]; return ;
}
Objective-C( 语法二)的更多相关文章
- PHP语法(二):数据类型、运算符和函数
相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 这次整理了PHP的数据类型.运算符和函数. ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- CodeSmith 基本语法(二)
CodeSmith之四 - 典型实例(四) CodeSmith API文档 (三) CodeSmith 基本语法(二) CodeSmith 图形界面基本操作(一) CodeSmith的C#语法与Asp ...
- Pocket英语语法---二、指示代词和不定代词是什么
Pocket英语语法---二.指示代词和不定代词是什么 一.总结 一句话总结: 指示代词:标识人或事物的代词,用来代替前面已提到过的名词 this.these.that.those不定代词:指代不确定 ...
- Vue模板语法(二)
Vue模板语法(二) 样式绑定 class绑定 使用方式:v-bind:class="expression" expression的类型:字符串.数组.对象 1.2 style绑 ...
- Shell系列(36)- for循环语法二简介及批量添加删除用户
for循环语法二 for ((初始值;循环控制条件;变量变化)) do 程序 done 例子 例子-1 求和工具 需求:根据用户输入的数字,求1~输入所有数字的和 脚本: #!/bin/bash re ...
- Python基本语法[二],python入门到精通[四]
在上一篇博客Python基本语法,python入门到精通[二]已经为大家简单介绍了一下python的基本语法,上一篇博客的基本语法只是一个预览版的,目的是让大家对python的基本语法有个大概的了解. ...
随机推荐
- NET基础(2):类型转换
CLR最重要的特性之一就是类型安全的.在运行时,CLR总是知道对象的类型是什么.调用GetType()方法可以知道对象的确切类型,由于它是非虚方法,所以一个类型不可能伪装成另一种类型.每种编程语言都规 ...
- cat hesA/Models/score_tgt.sc| awk '{ print $2,$19}' | sort -n -k 1
cat hesA/Models/score_tgt.sc| awk '{ print $2,$19}' | sort -n -k 1 print the second collum in order
- 商人过河问题(DFS)
问题描述:3个商人带着3个仆人过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人.在河的任何一边,只要仆人的数量超过商人的数量,仆人就会联合起来将商人杀死并抢夺其财物,问商人应如何设计过 ...
- 如何知道btree树的高度
来自网络,总结到这里: 当我想看btree树高度的时候,筛选出来这篇文章"为什么 B-tree 在不同著作中度的定义有一定差别?",知道了高度的算法是这个公式:但是里面又提高t和出 ...
- 关于.net编译时目标生成平台
x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行. x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行. anycpu:( ...
- python pip install
wget --no-check-certificate https://github.com/pypa/pip/archive/1.5.5.tar.gz https://github.com/pypa ...
- PHP中的闭包和匿名函数
闭包的概念是指在创建闭包时,闭包会封装周围的状态的函数.即便闭包所在环境不在了.但闭包中封装的状态依然存在. 匿名函数就是没有名称的函数. 它们看似很函数一样,实际上它们属于Closure类的实例 P ...
- (转)QML代码与现有Qt UI代码整合
http://blog.csdn.net/henreash/article/details/7934315
- 忙了好一阵,今天随便写篇关于canvas的小东西
前几天在朋友圈发了几条3D demo视频,其中就有3D空间组成各种图形.如上! 那么这些图形的每个mesh的坐标可不是手动去写,如果你愿意我当然不拦着!所以今天这篇就来介绍如何获得这些图形的坐标数据. ...
- Flex http请求
下面类支持POST和GET请求,请求数据和出错将返回 package com.sole.util { import flash.events.Event; import flash.events.HT ...