2015.6.29 第一堂 oc的准备和学习

第一次网络学习课,效率较高。

总结:

1、边讲边打边思考归纳

2、学习完毕后可通过复述、回想来复习


知识点一:面向对象和面向过程的区别

 面向对象:

 将数据和数据相对应的操作综合为一体;

 面向对象是将所有的类的共同点抽象出来;

 对象和对象之间是通过接口来进行通信;

 面向对象的执行流程不固定,由开发者自己控制;

 

 面向过程:

 由一个个的函数模块组成,各个模块就形成一种树状结构;

 执行顺序固定,从上至下,一次执行;

 每个模块都是由 条件循环 选择语句组成;

 

 

 

知识点二: ios系统架构

 Cocoa Touch :和用户进行交互层 --UIKit框架,Event事件处理框架。——使用oc

 (电脑没有touch

 Core Media 核心媒体层:音频 视频 访问系统的图片框架,Mapkit地图框架,Location框架——大部分都是oc实现

 Core Services 核心服务层:SQlite 数据库操作,Addressbook 地址簿,location定位,XML,Layout——基本都是c语言.

 Core OS 核心操作层:与硬件进行交互。内存管理,文件系统,电源管理。——都通过c语言实现

     

    

知识点三:oc c语言的对比

 occ语言的super set 超集  OC支持c语言所有的语法结构

 OCc语言基础上增加了面向对象的概念,是c语言的封装

 OC里面布尔值(BOOL/bool),YES NO表示 c语言是true false

 OC里面增加了一个 id类型c语言里面void*

 OC加了一个 NSObjext *类型

 OC里面加了SEL c语言:函数指针

 OC的实现文件后缀.m  c语言是.c

 OC里面可以包含c语言,反之不行

知识点四:琐碎知识点

     #import 完成两个功能

    1 导入头文件

    2 防止头文件重复引用

        

    //自动释放池

    //程序在运行过程中,分配的对象如果被autorelease修饰,那么这个对象将会被扔到自动释放池中,系统每隔一段时间就会去判断这个对象的运行周期是否已经结束,如果结束,那么系统会释放这个对象,不需要手动释放。自动释放池可以理解为一个队列。

    


知识点五:

小结:在.h头文件中实现属性变量和方法的声明,在.m中实现方法,在main.c文件中使用这些方法。

//
//  Person.h
//  oc准备
//
//  Created by tusm on 15-3-22.
//  Copyright (c) 2015年 tusm. All rights reserved.
//

#import <Foundation/Foundation.h>


/*关键字 
 c语言中: int auto long char struct enmu void true false 
 oc: @interface @end @implemention @SEL @selector
 */

/* 类的声明:
 @interface 类名:父类
 属性和接口
 @end
 */

/* 类的实现:
 @implemention 类名
 
 方法的具体实现:
 @end
 */

// 类的声明 
//类重要的有两点 方法 属性
@interface Person : NSObject{ // :后面接来自哪里即父类
    //类的属性
    //声明属性不能初始化
    /*
     C int float char double long short
     NS(Next Step)
     OC NSNumber NSStering NSArray
     */
    
    //@private 只能在类本身使用外部访问不了 子类也访问不了
    //@public 都可
    //@protected 外部不可子类可
    int IDCard;
    NSString *name;
    NSInteger age;//不是类 是属性变量
    NSDate *date;
    float weight;
}

//方法的声明 方法名:参数1注释其他名:参数2
+(void)classMethod; //创建一个没有参数的方法
-(void)buySomething:(int)money;//声明一个只有一个参数的方法 用一个冒号
-(void)setName:(NSString *)aName;
-(NSString *)getName;

-(void)quitFromCompany:(NSString *)name toTravel:(NSString *)dest;//totravel 可以不写 是个注释
-(void)setAge:(NSInteger)aAge andWeight:(float)aWeight;//多个参数 参数和参数之间是空格
-(BOOL)buycaipiao:(NSString *)ballNum;//??
/*方法的类型
- 实例方法(instance method)必须实例化这个类为某一个具体对象 用这个对象来调用的方法
+ 类方法(class method)只能用这个类来调用不能用类的对象去调用的方法
 //人类可以使用工具(和其他生物相比),类方法。 人买彩票,而不是人,实例方法。
在头文件里面声明的方法 必须实现
 //类方法 static静态方法:无需实例化这个对象,直接用类去访问的方法
 //1 封装 2单例模式
 
 
 (void)方法的返回值类型,没有返回值就是void
 setName 方法名
 andAge 标签名   和上者以空格隔开
 NSString*第一个参数 NSInterger 第二个参数
 
 头文件中声明的方法必须去实现
 */

// NSObejtct 所有类的一个父类 内存空间分配+初始化对象
// .h头文件 类的头文件里应该做 1声明属性变量 2方法(操作属性的)


@end



//
//  Person.m
//  oc准备
//
//  Created by tusm on 15-3-22.
//  Copyright (c) 2015年 tusm. All rights reserved.
//

//.m 实现文件  头文件里方法的声明必须在.m实现文件中实现这些方法的具体内容
#import "Person.h"

@implementation Person //类的实现

+(void)classMethod{
    NSLog(@"类方法,必须用类来调用");
}


-(void)setName:(NSString *)aName{
    name = aName;
    NSLog(@"实例方法,访问对象的名字(属性)");
}

-(NSString *)getName{
    NSLog(@"实例方法,访问对象的名字(属性)");
    return name;
}

-(void)setAge:(NSInteger)aAge andWeight:(float)aWeight{
    age=aAge;
    weight=aWeight;
    NSLog(@"实例方法,需要两个参数");
}

-(void)quitFromCompany:(NSString *)name toTravel:(NSString *)dest{
    NSLog(@"%@ %@",name,dest);
}
@end




//
//  main.m
//  oc准备
//
//  Created by tusm on 15-3-22.
//  Copyright (c) 2015年 tusm. All rights reserved.
//


//类的实例化 有了对象对象调用对应的实例方法- 或者类直接使用类方法+  zzz
//.h声明类和方法 .m实现方法
#import <Foundation/Foundation.h>//command键看说明 <>系统 ""自己
#import "Person.h"//避免头文件的重复引用
//导入头文件

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //类不是真实存在的只是一个抽象的事物
        //类的实例化是对象(具体到某一个实际存在的事物)
        Person *lisi = [[Personalloc]init];

        
        // @表示OC的对象
        NSLog(@"Hello, World!");
        /*printf 和 NSLog
         共同点:都是向终端输出一段字符
         不同点:
         1.NSLog会自动换行
         2.NSLog打印的是字符串对象,需要在“”前面加@ 
         3.NSLog除了可以打印基本类型之外,还可以打印对象(比如数组、字典)
         使用%@格式打印
         */
    
        //定义一个数组
        NSArray *namesArray = @[@"ER3",@"3324"];
        NSLog(@"the namesArray is:%@ ",namesArray);
        
        
        //类方法的使用:写法简单,不能访问方法外的所有资源
        //中括号 调用方法
        [Person classMethod];
        
        
        //实例方法的使用:可以利用所有属性和方法,但必须实例化一个对象才可以调用
        
//        //1.实例化类的对象 (创建一个对象的过程) 空间分配好了
//        Person *zhunbei = [Person alloc];
        //alloc是类方法,返回的zhunbei是实例xx,所以下面的zhangsan调用了zhunbei后,是实例方法
//        //2.init 初始化 给他一个名正言顺的身份
//        Person *zhangsan = [zhunbei init];
        
        //合起来写比较好,实例化了一个对象
        
        Person *zhangsan = [[Personalloc]init];

        [zhangsan setName:@"张三"];
        [zhangsan setAge:20andWeight:110];
        //错误 [zhangsan classMethod]因为这是类方法 不需要对象来调用
        NSLog(@"name:%@",[zhangsangetName]);
        
        Person *zhanger = [[Personalloc]init];
        [zhangsan setName:@"张二"];
        [zhangsan setAge:22andWeight:120];
        NSLog(@"name:%@",[zhangergetName]);
        //类(抽象的,不存在的)是一个,对象不是一个

    }
    return 0;
}


//define 和 关闭printf


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值