黑马程序员技术交流社区

标题: 学习笔记10-OC入门基础 [打印本页]

作者: 仰望星空的猪    时间: 2015-11-23 19:18
标题: 学习笔记10-OC入门基础
本帖最后由 仰望星空的猪 于 2015-11-23 19:23 编辑

1     import 引入头文件 可以防止重复包含 include 需要预处理指令。
2     NSLog    参数的是NSString 类型对象
printf  参数是字符串指针。

NSLog  可以自动换行  输入的内容有日期和项目名称
NSString 是OC的特有用来定义字符串C中不支持
NSLog  可以格式化输出  %@ 打印字符串  但不支持C%s
                C中不能使用%@打印字符串。
3     @符号的使用
@“xx” 表示xx是OC中的一个字符串。
@标识符  表示OC中的关键字
4     OC中的注释和C的相同
5     OC可以向下兼容C可以使用C中的函数调用方法和C 相同。
6     OC和C差异
1) 源文件对比  
C中有.c .o .out .h
OC中 .h .m

2)基本数据类型
       OC添加了一个 bool类型和block类型。
       指针数据类型class(类)  id
       特殊类型   SEL  nil(空对象)
3) 增强了for 快速变量数组和字典等集合。
4) 方法定义
5) Boolean 作用 判断逻辑值 0 假  非0真
存储的值 true 1   false 0
BOOL 类似Boolean  YES 1   NO 0
6) 添加异常捕捉机制。
7     面向对象
面向过程: 强调的是功能行为
                             关注的解决问题需要哪些步骤
面向对象:将功能封装进对象,强调具备了功能的对象
                            关注解决问题需要哪些对象
                            面向对象是基于面向过程的。
特性:封装 继承 多态
       类:是具有相似内部状态和运动规律实体的集合。(名词提炼法)
               类的构成:类型  属性 和方法(行为或对属性中的数据进行操作的方法)
        对象:对类的相同特征属性和运动规律的提取。图纸
8     类的声明(.h)和实现(.m)
方法:相当于C中的函数。
              +动态方法
-      静态方法  类似java中static定义的方法
声明(@interface):声明类的属性和方法
@interface 类名:父类 {
       成员变量      //成员变量声明
}
方法声明
@end    //以@end 结束该类的声明

@interface Person:NSObeject {
       @public;
NSString  *name;      //成员变量声明
       int age;
}

@end    //以@end 结束该类的声明

实现(@implementation)实现声明中定义的方法
       @implementation  类名
              声明方法的实现
@end
9     对象的创建
OC中对象创建时都是创建的对象指针
类名 *对象名=[类名 new];
       Person  *person =[ Person new];
       new 的作用:向计算机申请内存空间  给成员变量赋初值 返回申请空间的首地址。
10 成员变量的访问  
person->name=@“xiaoming”; //成员变量赋值
person->age=15;
点语法
person.name=@“xiaoming”; //成员变量赋值
person.age=15;

NSLog(@”name:%@ \t age:%d”, person->name, person->age);//成员变量的使用。
10  方法的定义、实现和调用
方法前 + 表示动态方法 – 表示静态方法
声明在@interface内   实现在@implementation内
1) 无参无返回值对象方法的声明
-(void) 方法名;
无参无返回值对象方法的实现
-(void) 方法名{
          代码块
}
方法调用 [对象 方法名];

2)   有参无返回值对象方法的声明
参数之间可以加一些修饰词。
-(void) 方法名 : (参数类型) 参数名 :(参数类型)参数名 ;
有参无返回值对象方法的实现
-(void) 方法名 : (参数类型) 参数名1 :(参数类型)参数名2  {

}           注意  每个参数之前有冒号分隔  冒号算方法名的一部分
有参无返回值对象方法的实现
方法调用 [对象 方法名:实参1:实参2];

//
//  main.m
//  1 类的声明、实现和调用
//
//

#import<Foundation/Foundation.h>

@interfacePerson :NSObject
{
    NSString *_name;
    int _age;
}

//无参无返回值对象方法的声明
-(void)run;
// 有参无返回值对象方法声明
-(void)run:(NSString *)name andSpeed :(int)speed ;
@end

@implementationPerson
//无参无返回值对象方法的实现
-(void)run{

    NSLog(@"person is running");
};
// 有参无返回值对象方法实现
-(void)run:(NSString *)name andSpeed :(int)speed {
    NSLog(@" %@ is running by %dkmph",name ,speed);


}

@end

intmain(int argc, const char * argv[]) {
    @autoreleasepool {

        Person *p= [Person new];
        //无参无返回值对象方法的调用
        [p run];
        // 有参无返回值对象方法调用
        [p run:@"xiaoming"andSpeed:100];
    }
    return 0;
}

11  对象的存储细节
创建对象  Person *p =[Person new];
代码区:存放了类的成员变量及对象方法
堆区:new生成的对象后,堆区中存放了类的成员变量及其初值。
          还有一个 _isa指针存放代码区的类的首地址。
               并将该实例对象的首地址返回。
栈区:Person *p 之后,栈区存放了指针变量p  并接收new返回的实例对象地址。
调用函数时 先找堆区的实例对象_isa 指针 通过_isa指针找代码区的代码。
12  #pragma mark 组名
#pragma mark – 组之间加一条横线.
13  函数和对象方法对比
对象方法
1)对象方法的声明只能写在 @interface @end之间,对象方法的实现只能写在@implementation @end之间。
2)对象方法都以 – 开头 类方法以+开头
3)对象方法只能由对象来调用,类方法只能由类调用
4) 对象方法归类或者对象所有。

函数
1) 函数属于整个文件,可以写在文件任何位置。
2) 函数不存在隶属关系
3) 可以直接调用
4) 不可以访问对象中的成员变量。
14  常见错误
1) 声明和实现不能嵌套
2) 声明和实现必须同步
3) 成员变量必须写在{}内
4) 成员变量声明时不能赋值。
5) 成员变量不能使用static




作者: 超人不会飞啊    时间: 2015-11-23 23:40
速度真快啊~感谢分享
作者: 仰望星空的猪    时间: 2015-11-24 10:07
超人不会飞啊 发表于 2015-11-23 23:40
速度真快啊~感谢分享

嘿嘿  几天的一起发表 的
作者: cxk    时间: 2015-11-24 11:23
看着还不错的样子哦,继续努力,我也要整理出属于我自己的笔记。
作者: linexs    时间: 2015-11-24 12:16
谢谢,撸主分享
作者: liury    时间: 2015-11-24 12:59
收藏      
作者: 仰望星空的猪    时间: 2015-11-24 13:38
cxk 发表于 2015-11-24 11:23
看着还不错的样子哦,继续努力,我也要整理出属于我自己的笔记。

嗯 努力就有希望
作者: heimaye    时间: 2015-11-24 14:02
这个笔记,先记下,大神膜拜了,有收徒弟吗
作者: 仰望星空的猪    时间: 2015-11-24 14:37
heimaye 发表于 2015-11-24 14:02
这个笔记,先记下,大神膜拜了,有收徒弟吗

大神??  你也是新入门的吧  跟我一样
作者: 爱尘iPhone    时间: 2015-11-24 15:26
你这流程已经走到哪里了啊!写个流程攻略吧!小神
作者: 仰望星空的猪    时间: 2015-11-24 17:03
爱尘iPhone 发表于 2015-11-24 15:26
你这流程已经走到哪里了啊!写个流程攻略吧!小神

开始做入学考试了  等我过了再说吧  哈哈
作者: 649685603    时间: 2015-11-24 18:08
printf("%s,%d",per.name,per.age);
作者: susie_cc    时间: 2015-11-24 18:13
楼主是上的基础班还是自己学习的,学了多长时间啊?
作者: HI耀玮    时间: 2015-11-24 18:54
进来看看,不错
作者: MadeLife丶    时间: 2015-11-25 01:37
顶一个!
作者: cxk    时间: 2015-11-25 22:57
仰望星空的猪 发表于 2015-11-24 13:38
嗯 努力就有希望

谢谢你哦  我会加油的
作者: 罗文强    时间: 2015-11-25 23:04
楼主这个学习方法很不错哈,向楼主学习了!希望继续更新
作者: qinxiaodong    时间: 2015-11-26 17:25
面试用的到
作者: FengLinHuoShan    时间: 2015-11-26 21:48
支持,加油支持,加油支持,加油
作者: Newbee_123    时间: 2015-12-3 00:26
马上学OC 楼主笔记不错。。学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2