第一次网络学习课,效率较高。
总结:
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语言的对比
oc是c语言的super set 超集 OC支持c语言所有的语法结构
OC在c语言基础上增加了面向对象的概念,是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