黑马程序员之ios学习总结——10 OC语言的构造方法和分类
构造方法:用来初始化对象的方法,是个对象方法,-开头。构造方法其实就是将对象初始化的方法。以前对象的初始化都用[Person new];这里面的new方法太固定,耦合性太强,有时候没办法满足需求。其实new方法里面融合了alloc方法和init方法。实际上是[[Person alloc] init];alloc是类方法,目的是分配存储空间,init是对象方法,用来初始化对象的。
重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值。
重写构造方法的注意点:
1.先调用父类的构造方法([super init])
2.再进行子类内部成员变量的初始化
Person.h文件
#import <Foundation/Foundation.h>@interface Person : NSObject
@property(nonatomic,assign) int age;
@end
Person.m文件
#import "Person.h"
@implementation Person- (id)init
{if ( self = [super init] ){ // 初始化成功_age = 10;}// 3.返回一个已经初始化完毕的对象return self;
}@end
main.m文件
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"int main()
{Person *p = [[Person alloc] init];return 0;
}
此时经过重写init方法后,_age初始值就为10.
重写-init方法
- (id)init{// 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性self = [super init]; // 当前对象 self// 2.如果对象初始化成功,才有必要进行接下来的初始化if (self != nil){ // 初始化成功_age = 10;}// 3.返回一个已经初始化完毕的对象return self;}
自定义构造方法:在对象初始化的时候,传一些参数,让成员变量值随着变化。
自定义构造方法的规范:
1.一定是对象方法,一定以 - 开头
2.返回值一般是id类型
3.方法名一般以initWith开头,比如:
<span style="font-size:24px;">- (id)initWithName:(NSString *)name;- (id)initWithAge:(int)age;- (id)initWithName:(NSString *)name andAge:(int)age;</span>
在对象初始化调用init方法时,传一些参数。
Student *p = [[Student alloc] initWithName:@"Jim" andAge:29 ;
在.m文件中对自定义的构造方法进行实现
#import “Student.h”@implementation Student- (id)initWithName:(NSString *)name andAge:(int)age
{if ( self = [super init] ) //如果当前对象初始化成功,即self!= nil;{_name = name;_age = age;}return self;
}@end
main.m中,对象p初始化的时候传一些参数,此时成员变量就是传的参数值。
#import <Foundation/Foundation.h>
#import "Student.h"int main()
{@autoreleasepool {Student *p = [[Student alloc] initWithName:@"Jim" andAge:29 andNo:10];}return 0;
}
分类-Category:
1.基本用途
如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式
继承
分类(Category)继承和分类有一些相似处,也有本质的区别。
2.格式
分类的声明:
@interface 类名 (分类名称)
// 方法声明
@end
分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
分类名写在原来类的右边,并且用小括号括住,只要是小括号括住的类名,一定是分类,固定格式.
NSString+Number.h文件
#import <Foundation/Foundation.h>@interface NSString (Number)+ (int)numberCountOfString:(NSString *)str;- (int)numberCount;@end
NSString+Number.m文件
<span style="font-size:24px;">#import "NSString+Number.h"@implementation NSString (Number)+ (int)numberCountOfString:(NSString *)str
{return [str numberCount];
}- (int)numberCount
{int count = 0;for (int i = 0; i<self.length; i++){// 取出i这个位置对应的字符unichar c = [self characterAtIndex:i];// 如果这个字符是阿拉伯数字if ( c>='0' && c<='9' ){count++;}}return count;
}@end</span><span style="font-size:18px;">
</span>
main .m文件
<span style="font-size:24px;">#import <Foundation/Foundation.h>
#import "NSString+Number.h"int main(){int count = [@"9fdsfds543543" numberCount];NSLog(@"%d", count);return 0;
}</span><span style="font-size:18px;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);font-size:24px;">3.</span><span style="font-size:24px;"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">好处</span>:</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);font-size:24px;">一个庞大的类可以分模块开发</span>
一个庞大的类可以由多个人来编写,更有利于团队合作
4.分类的使用注意:
Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效
黑马程序员之ios学习总结——10 OC语言的构造方法和分类相关推荐
- 黑马程序员_java自学学习笔记(八)----网络编程
黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...
- 黑马程序员Java教程学习笔记(五)
学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...
- 黑马程序员Java教程学习笔记(三)
学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(三) 面向对象:设计对象.注意事 ...
- 【黑马程序员新版Linux学习笔记】Linux系统实用操作命令——操作演示
[黑马程序员新版Linux学习笔记]Linux 零基础快速入门: (一)Linux基本命令--操作演示 (二)Linux用户和权限 -- 操作演示 (三)Linux 小技巧快捷键 (四)Linux系统 ...
- 黑马程序员 c++视频学习详细笔记 下载地址
黑马程序员 c++视频学习详细笔记 下载地址: https://download.csdn.net/download/m0_47891203/84348174 建议结合博主博文学习
- 跟着黑马程序员pink老师学习的笔记及小破站学习的笔记
网页 1.网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合 2.什么是网页? 网页是网站中的一"页",通常是HTML格式的文件,它要通过浏览器来 ...
- 基于VueAxios制作音乐播放器(bilibili黑马程序员Vue入门学习记录)
目录 使用Vue制作一个音乐播放器 前言 Vue Vue导入 Vue挂载 Vue指令 v-text v-html v-on v-show v-if v-bind v-for v-model axios ...
- Java开发程序员最值得学习的10大技术
作为一个开发人员,我们最大的挑战就是保持自己了解新的技术.技术变化很快,你大概每两年就会看到一个新版本的编程语言和框架. 就拿2017年来说,AR.VR.区块链.人工智能等等已经扑面而来了.除了这些离 ...
- Java程序员最值得学习的10大技术
程序员们是最具有挑战性的工作,我们最大的挑战就是保持自己了解新的技术.技术变化很快,你大概每两年就会看到一个新版本的编程语言和框架. 就拿2017年来说,AR.VR.区块链.人工智能等等已经扑面而来了 ...
最新文章
- String.hashCode 哈希值出现重复?
- 如何去除矩阵中的NaN元素
- 【DirectX12】4.用FBX_SDK读取网格数据
- Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库...
- chgrp和chown命令
- oracle job 定时执行参数
- python要背的单词_Python-默背单词
- 2019年Java程序设计讲课笔记目录
- c# 程序调试出现“未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。”...
- Sparsity and Some Basics of L1 Regularization
- Depends简介与使用说明
- 如何用电子书来做网络营销
- 首次登录Navicat连接数据库遇到的问题
- 企业微信打卡怎么防止作弊?看看其他企业是怎么做的
- Android 8.0 状态栏信号显示、信号定制
- 量化对冲:智能对冲策略解析
- Hadoop Day1
- ROS学习(一)ROS Noetic安装及环境配置
- 全国人口净流入城市排名2020_2019年长三角各城市常住人口、城镇化分布:苏宁杭净流入超200万...
- [易飞]累计组成用量=组成用量/(底数*标准用量)