标签:des style blog http io ar color 使用 sp
------不喜勿喷------
???面向对象的思想
以对象为主体,强调有拥有这些功能的对象。
好处:将复杂的事情简单化,更加符合人民的思想,从执行者到指挥者
???对象
世界万物都是对象
???类
对具体事物(对象)的抽象。
确定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;
}
标签:des style blog http io ar color 使用 sp
原文地址:http://www.cnblogs.com/wscd/p/4131227.html