OC基础知识概念和注意点

------不喜勿喷------

???面向对象的思想

以对象为主体,强调有拥有这些功能的对象。

好处:将复杂的事情简单化,更加符合人民的思想,从执行者到指挥者

???对象

世界万物都是对象

???类

对具体事物(对象)的抽象。

  确定Object-C是面向象对象的

1、Foundation是一个框架 Foundation.h是框架的主头文件

  import 是include的升级版,可以自动防止重复包含 注意:以后都要使用import

2、printf与NSLog的区别(C和OC输出函数的区别)

1.名字不同

2.打印的内容不同 nslog括号里面要以@开头

3.输出的内容不同

4.nslog可以自动换行

5.用于的语言不同

3、类三个部分:

  名字:首字母大写,其他部分遵循驼峰原则  (@interface Phone : NSObject)

属性: 最好以_开头,其他部分遵循驼峰原则    (int _cpu;)

行为(功能/方法): 遵循驼峰原则     (-(void)callPhone:(char *)telephone;)

  创建类:类的声明和类的实现两部分  

  @interface 。。。。@end (不可以丢)

  @implementation 。。。。@end

  所有的类都继承于NSObject类 NSObject的作用:使类具有创建对象的能力

  类的属性的声明只能写在{}里面

4、自动释放池    @autoreleasepool 自动释放内存

5、创建对象

  [Person new]的作用:

1.开辟存储空间保存对象

2.初始化成员变量(字段,实例变量),数据类型都初始化为0或nil

3.返回地址

用Person类型的指针保存Person对象的地址

person1是局部变量,在栈区

对象指针     对象

Person *person1 = [Person new];//在堆里面创建了一个对象

给成员变量赋值与给结构体赋值方法相同

   一个类可以创建多个对象,对象之间互不影响

注意:在oc当中,方法或者成员变量只能被对象指针/类名调用

6、对象方法:

  命名规则:1.以-号开头

       2.所有的数据类型就放在()里面,而且只有数据类型放在()里面

       3.方法名遵循驼峰原则

       4.如果方法没有参数,那方法名后面什么都不用写

  方法类型:1、无参无返回值  2、无参有返回值  3、有参无返回值  4、有参有返回值

    规则:一个参数带着一个:号,:号放在参数类型的前面

注意:1、“:”号属于方法名的一部分,-号不是方法名的一部分

   2、在类的内部可以直接访问成员变量

   3、在对象里面有一个隐藏的成员变量叫isa,专门用来指向方法列表

      

7、 常见错误分析:

1.只写声明,不写实现

2.声明实现不能嵌套调用

3.与c函数也不能嵌套

4.不能丢掉:NSObject

5.属性只能声明在{}当中

6.不能在声明里面直接给成员原变量赋值

7.方法的声明只能写在{}后面,@end前面

8.方法不能只有声明,没有实现。调用的时候会报经典错误。

-[Person run]: unrecognized selector sent to instance 0x100202d00 翻译:没有找到对应的方法

9.没有声明,只有实现,这样可以,但是非常不推荐使用。

这是oc的弱语法。所以不推荐使用

注意:在一个  .h .m文件当中最好只放一个类的声明与实现

  封装:将实现过程隐藏起来,属性私有化,通过公共的方法访问成员变量,就是对对象的封装。

  举例:

   出现脏数据原因:直接给成员变量赋值

解决办法:1.不让他直接访问  2.过滤数据

直接赋值:  gun1->_bulletCount = -4;

通过方法间接赋值  [gun1 addBulletCount:-4];

8、get、set 方法

      // @public  此时权限变成默认的@protected,它的范围包括本类与子类

oc有一个约定:给成员变量赋值 用set方法

       规则:1.以-号开头  2.方法名以set开头,其他的,首字母大写,其他遵循驼峰原则  3.无返回值  4.有一个参数,参数的类型就是成员变量的类型,参数的名称就是成员变量去掉下滑先后的部分

       get方法 作用:取成员变量的值

       规则:1.以-开头 2.方法名就是成员变量去掉下滑先后的部分 3.有返回值,返回值类型就是成员变量的类型  4.无参数    

9、类方法

   1、由类名调用

2、以+开头

3、类方法可以调用自己的类方法,不能调用对象方法

4、可以作为工具方法

区分对象方法:当两个方法同名的时候,用前面的+ -号区分

优点:类方法:效率高,节省内存  缺点:不能使用成员变量

优点:对象方法:可以使用成员变量

   命名规则:1.以+号开头  2.其他的规则与对象方法同

   5、对象方法与类方法嵌套调用

对象方法调用自己的对象方法   可以

对象方法调用自己的类方法    可以

类方法调用自己的类方法      可以

类方法调用自己的对象方法    不可以

注意:当类方法和对象方法同名时,他们是两个方法,所以不会报错

10、self --self代表的是类名或对象指针  

  问题1:什么时候可以类名或对象指针?  在方法当中进行嵌套调用的时候

   问题2:什么时候代表对象指针,什么时候代表类名?  在对象方法当中调用方法的时候,self代表对象指针

                            在类方法里面调用方法的时候,self代表类名

    问题3:self只能调用方法吗?self在代表类名的时候,只能调用方法,代表对象指针的时候可以调用成员变量

注意:自己调用自己会造成死循环,一定要加以注意。

   //所谓的私有方法就是方法没有声明,只有实现。但是记住oc当中没有真正的私有方法。

  作用:辅助本类的其他方法

11、点语法

    1.直接赋值  //girl1->_age = 20;

    2.通过set,get方法间接赋值  // [girl1 setAge:20];

    3.通过点语法,点语法实际上只能是get,set方法(用点语法不能调用其他方法)  //girl1.age = 20;

      ???那里使用set,那里使用get        //当在=左边出现的时候,代表set,其他的地方代表get

12、property(合成存储器/属性生成器)

  property 作用:专门用来生成成员变量的get,set方法的声明

  格式:@property + 成员变量类型 + 成员变量去掉下滑线后的部分

  @property int age;

  synthesize  作用:自动生成成员变量的实现部分

    格式:@synthesize + 成员变量去掉下划线后的部分 = 成员变量

  @synthesize age = _age;

property加强

在xcode4.5之前,@property只能生成成员变量的声明部分,在4.5之后可以同时自动生成声明部分和实现部分和一个成员变量

注意:1.通过@property自定生成的成员变量是完全私有化的,只能在本类中使用

       2.要想在类的外部使用成员变量就要手动生成

  @property的修饰词(√√√√√)

  位置:@property 后面的()当中

  分类:assign,copy,retain,weak,strong,setter,getter,nonatomic,atomic,readonly,readwrite

     1.与线程安全有关 nonatomic,atomic  (注意:以后都写nonatomic)

      2.与内存管理有关  ARC(自动内存管理)   (weak,strong)修饰对象,(assign)修饰简单数据类型

                 非ARC(手动内存管理) (copy retain)修饰对象,assign

     3.与权限  readonly,readwrite(默认)

     4.自定义set,get方法  setter,getter

      copy当修饰对象时,只能修饰字符串对象

13、继承(父与子的关系)

  当子类与父类当中有同名的方法(同参数,同返回值,同方法名)的时候,这种现象叫方法的重写,子类的方法会覆盖父类的同名方法

方法的执行顺序:优先执行子类的方法

   作用:当子类的同名方法中想要在有父类的功能的同时有自己的功能

  super:代表父类的对象指针或类名

  在打印对象的时候,格式符是%@,在打印时调用的是description方法

    description类的描述方法,作用是打印对象的一些描述信息

 作用:就是当对象的属性很多时,需要打印,,就重写description方法

  类与类之间的关系:组合(一个类作为另一个类的成员变量),继承,传参

14、多态(一种事物的多种形态)

  简单的说就是:父类调用子类的方法;

  当用父类的对象指针指向子类的对象,在编译阶段是计算机是不会识别对象的,在运行阶段才会真正的调用方法,这叫动态绑定。当运行的时候也会识别对象也就会报错;

Animale *animal1 = [Dog new];

   animal1指向的是一个Dog的对象,所以要调用Dog的方法,这种情况下只有将Animal的指针转化为Dog的指针,才能调用Dog的对象方法。   

  1、 [(Dog *)animal1 bark];(√√√√)

  2、使用id

    id 是一种数据类型,可以代表任意类型(这些数据类型,必须是对象),又称为万能指针  同时也是一个关键字    

   NSObject *obje = [Person new];

[(Person *)obje feedAnimal:cat];

id myId=[Person new];  //使用id时不用强制转化

[myId feedAnimal:cat];

15、构造方法

   Dog *dog1 = [[Dog alloc] init];

???? 为什么要用alloc + init 代替new  因为我们想在对象初始化(init)的时候给属性赋值

  重写的父类的init方法  self = [super init];

  原先:对父类的属性的初始化,对自己属性的初始化

  增加功能:给自己的成员变量赋值  _age = 56;

  //构造方法 ,init方法属于构造方法

  //构造方法家族:注意:方法名必须符合驼峰原则

  举例:

  -(Person *)initWithAge:(int)age{

  self = [super init];

  if (self != nil) {

  _age = age;}

    return self;}

注意:如果将get,set方法的实现部分都重写了,property自动生成的成员变量就失效了。所以,只写一个才会保留property声明的成员变量

下面是C的一个题目(不用看)

//C二级指针  返回一个指针数组

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

char ** test(char *str);

#define N 1024

int main(void)

{

int i=0;

char str[N];

while((str[i]=getchar())!=‘\n‘)i++;

str[i]=‘\0‘;

char **ch=test(str);

for(i=0;ch[i]!=‘\0‘;i++)

{ printf("%s\n",ch[i]); }

return 0;

}

char **test(char *str){

char **ch=(char **)malloc(sizeof(char *)*10);

int i=0;

char *p=(char *)str;

while(1){

p=strtok(p," ");

if(!p){break;}else{

ch[i++]=p;

p=NULL;}}

return ch;

}

时间: 2024-08-07 04:23:32

OC基础知识概念和注意点的相关文章

IOS开发复习笔记(1)-OC基础知识

在上班之余学习IOS已经有三个多月了,因为基础有些薄弱从OC的基本语法开始学习的,相继看了青柚子和红柚子的书,现在在看编程实战,趁这个机会好好的总结一下: 1.命名约定 对象类型和名称一致,以免混淆 -(void) setURL:(NSString *)URL;//错误的命名方法 //更改为 -(void)setURLString:(NSString *)string; -(void)setURL:(NSURL *)URL; 静态变量(包括作用域)以s开头,而全集变量采用g开头,在通常情况下应避

oc基础知识(转)

1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouch Media Core Services Core OS -------------------- System Framework OC的类声明,定义域 OC关键字定义为  @class O-C特有的语句for(..in ..)迭代循环,其他的条件和循环语句和c一样 OC对面向对象的概述 (1)

Mysql安装以及基础知识概念

一.软件安装及服务器设置 安装教程:http://www.runoob.com/mysql/mysql-install.html Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误 参考解决方法:https://blog.csdn.net/seventopalsy/article/details/80195246 Windows 安装 MySQL 常见问题 参考解

开启Objective-C --- OC基础知识

一.Objective-C简述 Objective-C通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.Objective-C主要用于:编写iOS操作系统(如:iPhone.iPod touch.iPad 等苹果移动终端设备 )应用程序和Mac OS X操作系统应用程序的利器. Objective-C的流行当归功于iPhone的成功,因为Objective-C被用于编写iPhone应用程序. Objective-C是非常实际的语言.它是一个用C写成.很小的

oc基础知识回顾三

0.概念 1>协议(Protoco)是一系列方法的列表,其声明的方法可以被任何类实现,一般称为代理模式. 2>在.h文件中@protocol声明存在协议,跟@class一样 1.作用: 1>可以声明很多方法,但是不能声明成员变量. 2>如果某个类遵守了某个协议,则这个类拥有协议中的所有方法声明. 3>如果父类遵守了某个协议,则子类也遵守了这个协议, 2.基本语法 1>定义协议 // 定义一个协议,协议名称是myprotocol,NSObject是基协议,每个协议必须遵守

OC - 2.OC基础知识介绍

一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 以字母或下划线开头 3> 字符串 OC语言有自己特有的字符串,,区别于C语言字符串 4> BOOl类型 只有YES和NO两种取值 本质上是char类型,但理解为整型 BOOL类型是由 条件编译机制引进的 5> #import与#include 都是将文件内容拷贝到指令出现的代码行 系统文件

OC基础知识

Object C 语言基础 第一节总括 这一节是对Objective-C(以后简称OC)的简要介绍,目的是使读者对OC有一个概括的认识. 1.面象的读者 在阅读本文之前,应具备使用与C类似的编程语言(如C,C++,JAVA)的一些经验,同时熟悉面向对象编程. 2.OC简介 OC是以SmallTalk为基础,建立在C语言之上,是C语言的超集.20世纪80年代早期由 Brad J.Cox设计,2007年苹果公司发布了OC 2.0,并在iPhone上使用OC进行开发. 3.OC学习内容 学习的内容主要

OC基础知识(二)

1.Objective-C类和对象 Objective-C 简称OC. OC是c语言的超集,简单来说就是,OC全面包容C语言,也就是在OC中,可以使用C语言代码,编译器可以兼容C语言,并对其进行编译,执行. 1.面向过程po:Procedure Oriented 面向过程,就是在一个整体思路定好的情况下,按照这个思路一直走下去,这种情况的代码,就会比较稳定.但是,这种面向过程的思想,会比较坑爹,为什么这么说?因为,当需求改变的时候,也就是逻辑中,有一个步骤改变的话,就会改动整个程序,相当于重新写

OC基础知识总结

//OC: Objective-C, 面向对象的C语言 //OC与C的区别 //1.OC是C的超集, C语言的所有语法都可以在OC中使用 //2.OC是面向对象 //3.OC是一门运行时语言 //4.OC的类库丰富 NSString *string = [[NSObject alloc] init]; //string在编译时是NSString类型, 在运行时是NSObject类型 //面向对象的编程: OOP //面向对象编程的核心: 类与对象 //面向对象的三大特性: 封装, 继承, 多态