二十八.id类型(万能指针)


可以指向任何id对象(本身就是指针,不用*)


id相当于NSObject *,类似于一种多态。

二十九.重写构造方法


new方法的实质:分配空间+alloc 和 初始化-init

开发过程一般是用 +alloc 和 -init来进行初始化

[[Person alloc] init]

重写init方法:

在.m里面写
首先调用父类的构造方法。
标准写法是 self = [super init]; //super的init返回的是当前类,super的init方法是把isa指向相应的类并返回
self不为空,则初始化成功。
 - (void)init{
self = [super init];
if(self != nil){
//进行初始化
}
return self;
 }

优化为:

- (id)init{

if (self = [super init]){ //先赋值完毕并且判断self的值

//初始化成功

;

}

return self;

}


初始化顺序,先父类,后子类。

三十.自定义构造方法


规范:
1.一定是对象方法,以-开头
2.返回值一般是id类型
3.方法名一般以init开头

实例:

- (id)initWithName : (NSString*)name{

if(self = [super init]){

_name = name;

}

return self;

}

原则:自己的属性由自己的类来处理,要传递则通过super的构造方法。

三十一.指定Xcode模板


在路径

/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates

下存放的就是各个工程的路径。

修改Xcode模板注释

/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate/NSObjectObjective-C

三十二.分类(Category)


使用场景:
给某一个类扩充一些方法,不修改原来类的代码。
也分为声明和实现。
声明:
@interface <类名>(分类名称)
@end

@implementation <类名>(分类名称)
@end

创建:OC File ->File Type选择Category

在需要调用扩充的地方引入category的h文件。

分类可以把类分模块,一般以模块命名。

注意事项:
1.分类只能增加方法,不能增加成员变量。
2.分类内部可以访问类内的成员变量。
3.分类的方法会覆盖原来类里的方法!
找方法的顺序:分类->当前类->父类
最后参与编译的文件优先

三十三.应用分类给NSString加功能


计数NSString的阿拉伯数字个数:

分为类方法和对象方法两种实现:

NSString的self即为自身字符串。

调用方式:

int count = [NSString numberCountOfString:@"abc12345sjai6ais7as8ds9”];

[@"asdasd123" numberCountOfString]

实现方法:

+ (int)numberCountOfString:(NSString *)str{

;

; i < str.length; i++){

unichar c = [str characterAtIndex:i];

if(c >= '0' && c <= '9'){

count++;

}

}

return count;

}

- (int)numberCountOfString{

;

; i < self.length; i++){

unichar c = [self characterAtIndex:i];

if(c >= '0' && c <= '9'){

count++;

}

}

return count;

}

三十四.类的本质


类也是一个对象。类本身是一个Class对象。

Class对象成为类对象,类对象可以创建实例对象。

先用Class创建类对象,再用类对象创建实例对象。
Tip:
%p是打印地址,Class已经包含*,class方法返回类对象。

Person *p = [[Person alloc] init];

Class c = [p class];

Class c2 = [p class];

Class c3 = [Person class];

NSLog(@"c1 = %p, c2 = %p, c3 = %p",c,c2,c3);

可以看到三个地址相同,说明都是指向Person类的。

类的加载:load方法是在类加载时调用的方法。

可以发现,先加载父类,再加载子类。

当程序启动时,就会加载一次项目中所有的类(包括分类),类加载完毕后就会调用+load方法

先加载父类、再加载子类。

当第一次使用这个类,会调用+initialize方法(从分类开始找)。

三十五.description方法


看函数说明:在函数名上按住option键,直到出现问号再点击。

%@打印对象,默认情况下是打印<类名:地址>

%@会调用-description方法,返回值是OC字符串(类名+内存地址)。

应该重写description方法。

在实现里面重写:

- (NSString *)description{

return [NSString stringWithFormat:@"age
= %d, no = %d",_age,_no];

}

这样就可以用%@来打印类内所有内容了。

防止死循环:不要在重写的description里面使用self打印%@。

使用类方法+description:NSLog(@“%@“,[self class]);

但是+的方法默认不返回地址,仅仅返回类名。

%p打印&p为打印对象的真实地址。


三十六.NSLog的使用技巧


__LINE__ 打印当前行号(%d)

__FILE__ 打印文件完整路径+名字(%s) NSLog打印C语言字符串不允许使用中文!

__func__ 打印当前函数名(%s)

OC语言(四)的更多相关文章

  1. iOS开发-OC语言 (四)数组

    知识点 1.NSArray 2.NSMutableArray 1.数组的基本用法: 2.数组的遍历 3.数组排序 ===========   NSArray  不可变数组  ============= ...

  2. OC语言前期准备

    OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...

  3. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  4. OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  5. OC语言-03-OC语言-三大特性

    一.封装 1> 封装的定义 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别 2> 封装的好处 可以通过set方法防止为成员变量设置不合理的值 仅向外部提供公 ...

  6. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  7. 李洪强iOS开发之OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  8. oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

  9. oc语言--面向对象的三大特性

    一.封装 1.什么是封装 在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将对象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的 ...

  10. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

随机推荐

  1. MAC OS X下的Linux环境

    关键字: HomeBrew,好比Windows下的Cygwin 安装Homebrew 该si胜过macport ruby -e "$(curl -fsSL https://raw.githu ...

  2. ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年01月01日更新

    ROS机器人程序设计(原书第2版)补充资料 (零) 源代码等 ROS官网 版)部分内容修订 页:第1行,删去$ 页:第6行,float64 y 前面加一个空格 页:中间创建主题:下面程序不用换行,(& ...

  3. nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url

    场景:表面上访问的是http://127.0.0.1:7777/test/xhtml//tpl/app-tpl-webapp/css/base.css, 实际上看的是http://127.0.0.1: ...

  4. Java安全套接字扩展——JSSE

    上节已经介绍了SSL/TLS协议的通信模式,而对于这些底层协议,如果要每个开发者都自己去实现显然会带来不必要的麻烦,正是为了解决这个问题Java为广大开发者提供了Java安全套接字扩展--JSSE,它 ...

  5. Linux Debugging (九) 一次生产环境下的“内存泄露”

    一个偶然的机会,发现一个进程使用了超过14G的内存.这个进程是一个RPC server,只是作为中转,绝对不应该使用这么多内存的.即使并发量太多,存在内存中的数据太多,那么在并发减少的情况下,这个内存 ...

  6. Python pygame安装过程笔记

    今天看到一个教程,是关于Python安装pygame模块的.觉得很好,拿来分享一下. 安装Python 额,这个小题貌似在这里很是多余啊.但是为了照顾到刚刚学习Python的童鞋,我还是多啰嗦两句吧. ...

  7. Mac下hosts文件配置

    工作中总会因为莫名其妙的原因,比如Mac下面打不开某网站,但是在windows 7下面却可以,此时只需两步即可完成在Mac下面上网.在Windows下面Win+R,输入cmd,进入命令行,将在wind ...

  8. Java并发框架——同步状态的管理

    整个AQS框架核心功能都是围绕着其32位整型属性state进行,一般可以说它表示锁的数量,对同步状态的控制可以实现不同的同步工具,例如闭锁.信号量.栅栏等等.为了保证可见性此变量被声明为volatil ...

  9. React Native网络请求

    很多移动应用都需要从远程地址中获取数据或资源.你可能需要给某个REST API发起POST请求以提交用户数据,又或者可能仅仅需要从某个服务器上获取一些静态内容--以下就是你会用到的东西.新手可以对照这 ...

  10. linux常用的压缩与解压缩命令

    1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [ ...