Objective-C(二、类与isa指针,类的封装,set&get,类方法,对象方法)——iOS开发基础


结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~


二、类定义与封装


1、类与isa指针
类与isa指针
isa指针:创建实例对象时,会把类加载到内存,类中放方法的列表(方法的入口地址)。每个实例对象都有一个isa属性,指向这个对象所对应的类;
调用方法[c run]过程:根据C找到它所指向的实例对象,再由实例对象中的isa找到对应的类,在类中找到run方法的入口地址,直接执行这个方法的每一条指令。

2、类定义和声明常见错误分析
a、类外不能直接引用实例变量,必须通过实例对象引用实例变量。在类的方法中可以直接引用实例变量。
b、类的方法与普通函数的区别
(1)对象方法在定义和声明时要加-,数据类型要加(),而普通函数不需要。
(2)对象方法必须声明在@interface和@end之间,必须定义在@implementation和@end之间,而普通函数可以定义在除@interface@end之间的任何地方。
(3)对象方法必须通过实例对象来调用,而函数可以直接调用。
(4)对象方法可以直接引用实例变量,但是普通函数不行。
声明

 - (int)sumOfNum1:(int)num1 andNum2:(int)num2;

方法名:sumOfNum1: andNum2: 注意冒号也是方法名的一部分
同一个类中不允许两个对象方法同名
调用

 [p sumOfNum1:2 andNum2:18];

3、类的封装
(1)封装概念:隐藏属性,方法或者实现细节的过程叫做封装,本质上是对实例变量的封装
实例变量一般是隐藏的(非@public),不提供给外界直接访问和修改实例变量的权限,保证数据的安全性。
只允许通过对象方法访问对象的实例变量
(2)封装的作用:过滤不合理的输入值;隐藏类内部的细节,提供接口给外部调用

以下列一段.h文件程序来说明(setter和getter方法),方法的实现在.m文件中

 @interface Student : NSObject
 {
     NSInteger _age; //年龄
     NSInteger _no; //学号
     NSString *_name; //姓名
 }

 - (void)study;

 //set方法
 //set方法的作用:
 //提供一个方法给外界能够设置实例变量的值,可以在方法中对传入参数进行过滤,根据实际需要来改造参数。
 //命名规范:
 //1>方法名必须以set开头,set后跟上实例变量的名字;
 //2>无返回值(void);
 //3>一定有一个参数,关且参数类型和实例变量的类型保持一致;
 //4>形参名不能和实例变量的名字相同,否则会发生混淆(因此实例对象名字以_开头)
 - (void)setAge:(NSInteger)age;

 //get方法
 //作用:获取实例变量的值
 //命名规范:
 //1>有返回值,并且返回值类型和实例变量类型一致
 //2>方法名就是实例变量的名字
 //3>不需要参数
 - (NSInteger)age;

 //如果要设置某个实例变量为只读,则不去实现其Set方法,只实现get方法。
 //- (void)setName:(NSString *)name;
 - (NSString *)name;

4、类方法和对象方法:
对象方法:以“-”开头,只能由实例对象来调用
类方法:以“+”开头,只能由类名来调用,且不能访问成员变量
类方法的使用场合:
(1)方法内部不需要使用成员变量时,用类方法;
(2)开发中尽量使用类方法,因其不以来于实例对象,执行效率高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值