oc基础第三天-类方法、封装

本文详细介绍了Objective-C中NSString类的使用方法,包括字符串的创建、格式化及长度计算等内容。同时,还深入探讨了类方法的特点、定义、注意事项及其与实例方法的区别。


//***************** NSString 类介绍及用法


1)创建常量字符串,注意使用“@“符号。

    NSString *astring = @"This is a String!";


2)创建空字符串,给予赋值。

    NSString *astring = [NSString new];

    astring = @"Hello world!";


3)格式化创建字符串(按照指定的格式创建字符串)

    int i=1;

    NSString *imgName = [NSString stringWithFormat:@"xxxxxx%02d.jpg",i];


4)用一个已经存在的字符串创建一个新的字符串

    NSString *s1 = @"This is a String!";

    NSString *s2 = [[NSString alloc] initWithString:s1];

    NSLog(@"s2 = %@",s2);


//****例子:

int i=1;

float j=2.2f;

NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%02d.THis is %f string",i,j]];

NSLog(@"astring:%@",astring);



//NSString 字符串长度计算方法

通过调用NSString类的对象方法 length 可以获得字符串的长度

// 1)纯英文字符

    NSString *str1 =@"it cast!";

    NSLog(@"str1 length:%ld",[str1 length]); 8

//2)中英文混合

    NSString *str2 =@"传智cast";

    NSLog(@"str1 length:%ld",[str2 length]);6

//3)纯中文

    NSString *str3 =@"传智播客";

    NSLog(@"str1 length:%ld",[str3 length]); 4


//OC字符串中 中英文都当作一个字符


char *str ="传智播客";

NSLog(@"str  length:%ld",strlen(str)); 12

//注意: C语言中,每个汉字占用3个字节,可以使用strlen计算。



. 多文件开发

1,为什么要使用多文件?

在开发当中实现的功能一般会比较复杂, 所以会将类分成声明(.h文件)和实现(.m文件)部分,

2,.h文件中写成员变量和方法的声明, .m文件中写成员变量和方法的实现.

这样写大大提高开发效率, 提高代码的维护性.



//****************** 类方法概述及定义方法 ***********

,类方法

. 特点:

1. 以加号( + )开头,

2. 调用格式:  [类名  方法名]



. 注意事项:

1. 类方法可以和实例方法同名, 相互之间互不影响


2. 类方法可以从父类继承而来,子类可以重写类方法 // ,description类方法


3. 类方法和实例方法一样在interface里声明, implementation里实现。


4. 类方法由类名调用实例方法由对象调用。


5. 在类方法里使用了self, self指代的是调用者类


6. 在类方法中不能使用类的成员变量


7. 类方法和对象方法之间不能使用self相互调用


总结self : 谁调用当前方法, self就代表谁


类方法和对象方法的比较

1. 对象方法以减号开头, 可以使用成员变量

2. 类方法以加号开头,不能使用成员变量


3. 类方法使用场景

如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法


4. 匿名对象

匿名对象的使用场景: 当对象的方法只调用一次时,可以使用匿名对象来完成。


匿名对象优缺点 :

优点: 可以简化代码,方便方法调用;节省内存空间

缺点: 匿名对象实例化以后,只能使用一次

常见用法:

//下面两句的作用是等价的

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

Person *p1 = [Person new];

两者的区别:

alloc init 分别把分配内存和初始化的工作分开。这样更加的灵活,可以自行初始化对象的 成员变量值

而不像new每次都初始化为0

new 是把分配内存和初始化的工作一起完成了,先分配内存,然后调用类的构造函数。


//************ 类方法易犯的错误 ****************


/*

 self:  谁调用当前方法, self就代表谁

 

 1. 类方法中可以调用类方法吗?   // 可以,   通过类名, self来调用

 2. 类方法中可以调用对象方法吗?  // 可以通过参数传递对象

 3. 对象方法中可以调用类方法吗?  //  可以, 通过类名

 4. 对象方法中可以调用对象方法吗?//  可以, 通过参数, self

 

 注意点: 不管是类方法,还是对象方法, 都不能调用自己, 容易造成死循环

 

 */


//**************** 封装的概念及原理 ************

1.什么是封装:

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式


2. 封装的好处:

2.1  将变化隔离。(不管里面怎么变,使用者不需要知道)

2.2  便于使用。(使用者只需按照一定的方法使用就可以了)

2.3  提高重用性。(任何人都可以对已封装好的功能进行操作)

2.4  提高安全性。(由于暴露给使用者的只是一些外在的操作环节,而不是里面本质的东西,所以就提高了对他的维护性,也就是安全性)


3. 封装的原则:

3.1 将不需要对外提供的内容都隐藏起来。

3.2 把属性都隐藏,提供公共方法对其访问。


//封装的实现步骤

定义设置实例变量(setter)方法和访问实例变量(getter)的方法

//******************************************

4. setter方法的实现

set方法的书写规范:

1) set方法一定是一个对象方法

2) set方法一定不能有返回值

3) set方法必须以set开头

4) set之后跟的是实例变量去掉下划线,并且首字母大写

5set方法一定有参数,而且参数的类型和实例变量的类型一致

6) set方法的形参名一般是 去掉下环线的实例变量名

7)形参名不能和 实例变量名同名

8) set方法实现中,一定要用形参给实例变量赋值


成员变量: int _age; setter方法

-(void)setAge:(int)age{

    

    _age = age;

}


get方法书写规范:

1) get方法一定是一个对象方法

2) get方法一定有返回值,返回值的类型和实例变量的类型要一致

3) get方法的方法名 是去掉下环线的实例变量名

4) get方法一定没有参数

5) get方法的实现中,一定是返回实例变量值


成员变量: int _age; setter方法

-(int)age{

    return _age;

}



组合模式:把具有相同基类类型的对象组合到树形结构中,以表示部分-整体的层次结构,使得用 户对单个对象和组合对象的使用具有一致性。


依赖关系:A对象作为B对象的局部变量或是方法形参的,B依赖与A,这时候我们称AB之间存在一种依赖关系

 B          A

[p feedDog:dog];


关联关系,HasA关系:当一个对象拥有另外一个对象的时候, B对象为A对象的成员变量的时候,B对象与A对象之间存在一种关联关系



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值