黑马程序员-[OC]学习之旅-对象和类

本文深入探讨了Objective-C编程的基础知识,包括头文件、NSLog的使用、OC中的注释和@的特殊用途,以及与C语言的差异。详细介绍了类的声明和实现、面向对象与面向过程的区别,对象的创建、存储细节,以及函数与对象方法的区别。同时,总结了常见的错误和对象与方法的关系,并提供了字符串类NSString的介绍与字符串长度的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 头文件:

#import<Foundation/Foundation.h>,告诉编译器找到并处理名为Foundation.h这是一个系统文件#import表示将文件信息导入到程序中,可以防止头文件重复包含
#include <stdio.h>,include使用预处理防止重复包含,没写预处理指令,则无法防止重复包含

@class 类名;告诉编译器,此类是一个类名,编译时不进行检查

    int  mian(int argc,const char *argv[ ]),这是一个程序入口,参数argc- 参数数目,argv-参数值


2.  NSlog 的使用:

NSLog是Foundation框架提供的日志输出函数,与标准的C中的prinrf函数类型并可以格式化输出。

NSLog(@"%@",类对象);

NSLog和printf 的区别
    NSLog   参数是NSString的对象,printf是一个字符串常量指针
    NSLog   输出时间日子、项目信息。printf只输出要程序结果
    NSLog   可以自动换行,printf 学要加上\n才能换行

不能使用printf打印OC中的对象

3.  OC中注释和@的使用

@“”表示讲一个字符换转化为OC的字符串对象NSString

@标识符 OC中大部分的关键字都是以@开头

%@是OC中特有的
       单行注释://

多行注释:/* */

文档注释:/** */编译时不对注释做任何处理
         


4.   OC 与C 语言的差异: 

C中:有.c .o .out 

 OC 中有.h(头文件,包含方法,属性的声明) .m(类的实现文件)    .c(语言源文件) .o  
      .OC中特有的数据类型:


逻辑型BOOLean 用于存储指针和假值的变量。一般用于程序流程控制

取值::true  false       

   BOOL    取值::YES   NO 或  0  1

OC中新增for循环,可以快速遍历数组、字典等集合
 

5. 类的声明和实现:
  类:一类事物有共同特性和行为的抽象;

对象:类的实例化的个体事物;
    类的定义分为两部分:  
 类的声明(规定当前类的:类名、属性、行为),具体格式为:
  @interface  类名:父类名
{      
    //  定义类的属性;
  }     
  //  类的行为
   @end      
类的实现(实现具体实现)
@implementation    类名
 //  行为的具体实现
@end

类的四大特性::抽象性 封装性 多态性 继承性


6.面向对象和面向过程的区别:

面向对象: 强调功能对象  做什么事需要那些对象

面向对象是基于面向过程

面向过程: 强调功能行为  做什么事需要哪些步骤


7. OC语言中对象的创建    如:

[对象  new]; 一共做了三件事;

向计算机申请内存空间;

给类中的每一个成员初始化值;

返回新申请空间的首地址;

1) new的时候,申请的存储空间在内存的堆栈区:
       如果实例变量是基本数据类型,此时给初始化为0;
       如果实例变量是OC的字符串类型,此时初始化的是NULL;
2)实例变量保存在:堆区; P指针变量保存在栈区;对象方法保存在了代码区;

格式为: int  *p = [ Car  new];   可理解为   定义了一个car类型的指针变量;指针变量指向新申请的内存空间。或者:用  Car类 实例化了一个实例对象,对象的名字是P;

通过对象->对象成员(声明属性为:@public)的方式操作对象中的成员。


8.对象方法和类方法:

对象方法:

对象方法以-开头

对象方法只能由对象来调用

对象方法中可以访问对象中的成员变量

对象方式:调用格式:[对象名  对象方法];

类方法:

类方法以+开头

类方法只能由类来调用

类方法中不能访问成员变量

调用格式:[类名 类方法];

优点:不依赖对象执行效率高

  能用类方法解决问题,尽量使用类方法




9. #pragma mark 预处理指令的使用。
功能:简单来说,就是对代码的分组,方便代码的查找和导航;
格式为:#pregma  mark  +要定位的名称;


10 函数和对象方法的区别。  

对象方法::
对象方法只能实现在@implementation
对象方法以-开头  类都以+开头
对象方法只能由对象调用,类方法中只能由类来调用,不能当做函数来调用
函数属于整个文件中,可以写在文件中的任何位置
对象方法归类和对象所用
 
函数:
所用的函数是平行的
函数不存在隶属关系
使用的时候可以直接使用
不可以访问对象中的成员变量

11对象的存储细节

类创建对象,每个对象在内存中都占据一定的内存空间,每个对象都有一份属于自己的单独的成员变量。

方法在整个内存中只用一份,类本身在内存中占据一份存储空间

每个对象都包含一个isa指针,这个指针指向当前对象所属的类

[p  eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存储于类中的方法,执行

一个类可以创建多个对象,不同的对象在内存中分配的是不同的存储地址,所以个成员属性的地址各不相同

11. 常见错误汇总: 
  @interface @end和iplementation   @end 不能嵌套包含。

只有类的声明没有类的实现 漏写@end
成员变量没有写在{}里。
方法声明时不能对类的成员变量进行初始化。成员变量不能脱离对象而独立存在
方法无法像函数那样调用。
成员变量和方法不能用static 等关键字修饰,不要和c语言混搅。
类的实现可以写在mian函数后面,在使用之前只要声明就可以了。

经典错误: -[Person run]:unrecognized selector sent to instance 0x100103410

表明run 方法没有实现


12.对象和方法的关系:
对象做为方法的参数传递: 实例代码如下:

int main(int argc, const charchar * argv[]) {  
  1.     @autoreleasepool {  
  2.           
  3.         //创建一个士兵对象  
  4.         Soldier *s = [Soldier new];  
  5.         s->_name = @"三多";  
  6.         s->life = 98;  
  7.         s->level = 2;  
  8.           
  9.         //创建枪的对象  
  10.         Gun *gun = [Gun new];  
  11.         gun->_size = @"小米加步枪";  
  12.         gun->_bulletCount = 3;  
  13.           
  14.         //士兵开枪  
  15.         [s fireByGun:gun];  
  16.         [s fireByGun:gun];  
  17.         [s fireByGun:gun];  
  18.           
  19.     }  
  20.     return 0;  
  21. }  

对象作为方法的返回值:格式为:

-(Person  *)basePerson:(Person *)Person 

对象还可以作为方法的参数连续传递  比如例子:士兵开枪 枪射子弹


13.NSString类的介绍:

NSString是OC中的核心字符的类之一。

字符串创建的方法有:

创建常量字符串,注意使用“@”符号
  创建空字符串 NSString *s=[NSString new];    
第三种方法: NSString*name =[NSString stringWithFormat:@"nig"];
用一个已经存在的字符串创建一个新的字符串
   NSString *s2 =[[NSString alloc] initwithString:s];


14. 字符串长度计算的方法:

length:指的是字符的长度  一个字 和字符 或字母都是一个长度
     NSString *S1=@“ zhangsanfeng!”;

strlen 一个字节为3个字节



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值