OC基础学习2

1. 类的定义

为类定义属性的时候,以_开头

-> 类的声明
@interface 类名:NSObject
{
	这类事物具有的共同的特征,将他们定义为变量
}
功能就是1个方法,将方法的声明写在这里
@end

-> 类的实现
@implementation 类名
将方法的实现写在这里
@end

2. 类的对象

类名 *对象名=[类名 new];

Person *p1=[Person new];

3. 对象的属性

a. 默认情况下,对象的属性是不允许被外界直接访问的
如果允许对象的属性可以被外界访问,那么就再声明属性时加1个@public关键字
b. 访问对象的属性的方式

 对象名->属性名=值;
 对象名->属性名;
(*对象名).属性名;

平常使用的时候,使用->

4. 无参数方法

声明:
 - (返回值类型)方法名称;
 - (void)run;
 表示声明了1个无返回值并且无参数的方法
实现:
 - (void)run
 {
	 ..
 }
调用:
 [对象名 方法名];

5. 带1个参数法方法

方法头中的数据类型 都要用1个小括弧括起来

声明:
- (返回值类型)方法名称:(参数类型)形参名称;
- (void)eat:(NSString *)foodName;
实现:
调用:
[对象名 方法名:实参]

6. 带多个参数的方法

声明:
- (返回值类型)方法名称:(参数类型)形参名称1 :(参数类型)参数名称2 :(参数类型)参数名称3;
- (int)sum:(int)num1 :(int)num2;
实现:
调用:
[对象名 方法名:实参1 :实参2 :实参3];

7. 带参数的方法声明的规范

a. 如果方法只有1个参数,要求最好这个方法的名字叫做xxxxxxWith 或 xxxxxWithxxxxxx
b. 如果方法多个参数 建议这个方法名称:
   方法名With:(参数类型)参数名称 and:(参数名称) and:(参数类型)参数名称;
   - (int)sumWith:(int)num1 and:(int)num2;
   方法名With:(参数类型)参数名称 and:(参数类型)参数名称 and:(参数类型)参数名称;

   and也可以换成其他任何英语单词:
   - (int)sendWithMessage:(int)num1 toNumber:(int)num2;

8.内存中的五大区域

内存中的五大区域作用
存储局部变量
程序员手动申请的字节空间 malloc calloc realloc函数
BSS段存储未被初始化的全局变量 静态变量
数据段(常量区)存储已被初始化的全局 静态变量 常量数据
代码段存储代码 存储程序的代码
  1. 在创建对象的时候 ,肯定要访问类的

  2. 声明1个类的指针变量也会访问类的
    在程序运行期间 ,当某个类第1次被访问到的时候,会将这个类存储到内存中的代码段区域,这个过程叫做类加载

    只有类在第1次被访问的时候,才会做类加载
    一旦类被加载到代码段以后,直到程序结束的时候才会被释放

9. 对象在内存中究竟如何存储的

假设下面这个写在函数之中:
Person *p1=[Person new];

  1. Person *p1;会在栈内存中申请1块空间,在栈内存中声明1个Person类型的指针变量p1,p1是1个指针变量,只能存储地址

  2. [Person new]; 真正的内存中创建对象的其实是这句
    new做的事情:
    a. 在堆内存中申请1块合适大小的空间
    b. 在这个空间中根据类的模板创建对象
    类模板中定义了什么属性,就把这些属性依次的声明在对象之中
    对象中还有另外1个属性,叫做isa 是1个指针,指向对象所属的类在代码段中的地址
    c. 初始化对象的属性默认值
    如果属性的类型是基本数据类型 ,那么就赋值为0
    如果属性的类型是C语言的指针类型 那么就赋值为NULL
    如果属性的类型是OC的类指针类型 ,那么就赋值为nil
    d. 返回对象的地址

  3. 注意
    a. 对象中只有属性 ,而没有方法,自己类的属性外加1个isa指针指向代码段中的类
    b. 如何访问对象的属性
    指针名->属性名;
    根据指针 找到指正指向的对象 再找到对象中的属性来访问
    c. 如何调用方法
    [指针名 方法名]
    先根据指针名找到对象,对象发现要调用方法 再根据对象的isa指针找到类 然后调用类里的方法
    d. 指针变量放在栈里,对象的属性放在堆里面,类的方法放在代码段里方法不存储在对象之中

10. NULL与nil

  1. NULL

    NULL,代表这个指针不指向内存中的任何1块空间
    NULL其实等价于0 NULL其实是一个宏,就是0

  2. nil
    只能作为指针变量的值,代表这个指针变量不指向任何对象
    nil其实等价于0 ,其实是一个宏,就是0

所以NULL和nil其实是一样的
一般:C指针用NULL,OC指针用nil

11. 分组导航标记

会在导航条对应位置生成1个标记
#pragma mark 狗狗的声明
会在导航条对应位置生成一条水平线
#pragma mark -
会在导航条对应位置先生成一条水平线,再产生一个标记
#pragma mark - 狗狗的声明

12.OC方法与C函数

OC方法的声明只能写在@interface的大括弧外面,实现只能写在@implementation之中
函数除了在函数的内部和@interface的大括弧之中,其他地方都可以写
就算把函数写在类中,函数也不属于这个类,所创建的对象也没有这个函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值