main.m
//
// main.m
// OC_8
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年 aishuo. All rights reserved.
//
/*
OC 语言的特点在P4
*/
#import <Foundation/Foundation.h>
#import "Student.h"
//相当于一个声明文件
@interface Teacher : NSObject
{
@public
NSString *_name;
}
-(void)classBegin;
@end
//相当于实现文件
@implementation Teacher
-(void)classBegin
{
NSLog(@"%@ say class begin!",_name);
}
@end
/*
在OC中,我们使用#import指令来导入头文件
#import "header"导入自定义类的头文件
#import <header>导入ios框架类库的文件
Foundation 框架是用来处理用户界面之下的层(layer)中得特性的,利润数据结构和通信机制,我们OC中得程序,都是以Foundation框架为基础。
//作业
#include 与#import 的区别?
*/
int main(int argc, const char * argv[]) {
/*
auto 自动
lease释放
pool池
自动释放池技术提供了一种机制,可以让我们将对象的所有权释放,但是不会导致对象
马上被清理,利润用在一个方法返回一个对象中
有以下三种情况下我们可能会用自动释放池技术
1.如果我们写的程序不是基友UI框架的,如命令行工具
2.如果我们写的程序中有循环并且产生大量的临时对象
3.如果你并发第二个线程
通常我们不需要建立自己的自动释放池块,在oc中,以后需要在main函数中创建对象
都在我们的autoreleasepool中创建,让他来自动帮我们管理对象所有权的释放
*/
@autoreleasepool {
// NSLong()是系统日光的日志函数,用来在控制套打印出调试信息
NSLog(@"Hello, World!");//NSLong与printf函数的区别?
// printf("Hello, world!");
/*
面向对象的特征和概念
面向对象是现在主流的程序设计思想,面向对象是把高潮问题的实物分解各个对象
,然后协调各个对象之间的联系和通讯。建立对象之间的目的不是为了完成某一个
步骤,而是为了描述某个事物在整体解决问题的步骤中的行为。
其基本思想是:使用类,对象,属性,方法(函数)以及封装,继承和多态等概念来进行程序设计。
*/
//OC中常用的数据类型。前缀:NS
NSInteger age=25;//整形
NSUInteger age1=55;//无符号整形
// NSLog(@"age1=%d",age1);
CGFloat source=34.5;//浮点型
NSRange range;//表示范围作用 结构体
CGPoint point;
CGSize size;
NSRect rect;
NSString *string=@"My name is Rick";
char c=[string characterAtIndex:3];
NSLog(@"c=%c",c);
//oc里面没有多维数组,只有数组嵌套数组
NSArray *array=@[@1,@2,@3,@4];
NSDictionary *dictioanry=@{@"name":@"Rick",@"age":@25};
NSDate *date=[NSDate date];//美国时间
NSData *data =[NSData data];//二进制数据
//NSURL 网址
/*
NSOperationQueue 线程
NSThread 线程
dispatch_get_main_queue() 线程
*/
/*
什么是类类是一组具有相同属性及行为的对象的组合
在OC 中。类是由接口(interface)和实现(imolement)两部分组成
.h 为接口文件,用来实现属性的生命和方法的声明
.m 实现文件,用来实现属性和方法
*/
/*
什么是对象?
类的具体实现
创建和使用对象
OC创建对象的语法:
类名 *对象名=[[类名 alloc] init];
或者
类名 *对象名=[类名 new];
alloc为对象动态分配内存地址,需要做内存管理,放在对上面,需要做内存管理
init 在内存中填上初始值
堆:
栈:
new 为alloche init简写
*/
Student *stu=[[Student alloc] init];
Student *stu1=[Student alloc];
stu1=[stu1 init];
Student *stu2=[Student new];
//如何给类中的属性赋值以及调用类中的方法
//属性赋值。通过->给实例变量赋值
stu->_name=@"小红";
stu->_age=15;
stu->_address=@"广东";
stu->_hobby=@"看书";
NSLog(@"stu->name=%@",stu->_name);
[stu sayHello];//方法
NSString *stuString=[stu eatLunch];
NSLog(@"stuString=%@",stuString);
//手动创建一个类 类由两部分组成声明和实现
Teacher *ter=[Teacher new];
[ter classBegin];
}
return 0;
}
Student.m
//
// Student.m
// OC_8
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年 aishuo. All rights reserved.
//
#import "Student.h"
//在@implementation 与@end 中实现接口文件声明的方法
@implementation Student
-(void)sayHello
{
NSLog(@"Hello everybody!!!");
}
-(NSString *)eatLunch
{
if (_age<18)
{
return [NSString stringWithFormat:@"%@小姐,今晚有空吃饭吗",_name];
}
else
{
return [NSString stringWithFormat:@"%@小姐,今晚没空吃饭!",_name];
}
}
+(NSString *)playGame
{
return [NSString stringWithFormat:@"I like playing LOL!"];
}
@end
Student.h
//
// Student.h
// OC_8
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年 aishuo. All rights reserved.
//
#import <Foundation/Foundation.h>
//@interface , @end 关键字,表明声明的开始和结束
//Student 类的名称 ,NSObject 是该类所属的父类,在OC 中继承的语法为"类型:父类名"
@interface Student : NSObject
{
@public
NSString *_name;
//@protected
NSInteger _age;
//@private
NSString *_hobby;
NSString *_address;
/*
属性的作用域
@public 公开的,任何类的方法都可以访问
@protected 受保护的.有类本身和类的子类可以访问
@private 私有的,有类本身才能访问
*/
}
/*
减号(-)表明了该方法是实例方法。类方法则用加号(+)。
(书p23)括号中void表示无返回值类型
其他类型还有NSIntger。NSString类型等等。
*/
//声明方法
-(void)sayHello;//实例方法
-(NSString *)eatLunch;//实例方法
+(NSString *)playGame;//类方法
@end
StudentSon.m
//
// StudentSon.m
// OC_8
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年 aishuo. All rights reserved.
//
#import "StudentSon.h"
@implementation StudentSon
-(void)sayWord
{
//_name是@public 修饰的,所有类都是可以访问
NSLog(@"%@",_name);
//_age是@protected修饰的,该类与其子类都是可以访问
NSLog(@"%ld",_age);
//_hobby是@private修饰的,只有该类本身可以访问
//NSLog(@"%@",_hobby);
}
@end
StudentSon.h
//
// StudentSon.h
// OC_8
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年 aishuo. All rights reserved.
//
#import "Student.h"
@interface StudentSon : Student
-(void)sayWord;
@end