#import <Foundation/Foundation.h>
#import "Student.h"
在Student.h文件里
#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表示无返回值类型,其他类型还有 NSInteger,NNString类型等等
*/
-(void)sayHello; //实例方法
-(NSString *)eatLunch; //实例方法
+(NSString *)playGame; //类方法
@end
在Student.m文件里
@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
在main函数里
//相当于一个声明文件
@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框架类库里类的文件的.
Foundatiao框架是用来处理用户界面之下的层(layer)中的特性的,例如数据结构和通讯机制,我们OC中的程序,都是以Foundation框架为基础的.
//作业
#inculde 与 #import的区别?
*/
int main(int argc, const char * argv[]) {
/*
自动释放池(@autoreleasepool)
自动释放池技术提供了一种机制,可以让我们将对象的所有权释放,但是不会导致对象马上被清理,例如用在一个方法返回一个对象中.
有以下三种情况我们可能会用的自动释放池技术
1.如果我们写的程序不是基于UI框架的,如命令行工具
2.如果我们写的程序中有循环并且产生大量的临时对象
3.如果你并发第二个线程
通常我们不需要建立自己的自动释放池块.在OC中,以后需要在main函数中创建对象都在我们的autoreleasepool中创建,让它来自动帮我们管理对象所有权的释放
*/
@autoreleasepool {
//NSLog()是系统提供的日志函数,用来在控制台打印出调试信息
NSLog(@"Hello, World!"); //NSLog 与 printf函数的区别?
//printf("Hello,World!");
/*
面向对象的特征和概念
面向对象是现在主流的程序设计思想.面向对象是把构成问题的事物分解成各个对象,然后协调各个对象之间的联系和通讯.建立对象之间的目的不是为了完成某一个步骤,而是为了描述某个事物在整体解决问题的步骤中的行为.
其基本思想是:使用类,对象,属性,方法(函数)以及封装,继承和多态等概念来进行程序设计.
*/
//OC中常用的数据类型,前缀 :NS
NSInteger age = 25; //整型
NSUInteger age1 = 25; //无符号整型
CGFloat source = 34.5;
NSRange range;
CGPoint point;
CGSize size;
NSRect rect;
NSString *string = @"My name is yong";
char c = [string characterAtIndex:3];
NSLog(@"c = %c",c);
//OC里面没有多维数组,只有数组嵌套数组
NSArray *array = @[@1,@2,@3,@4];
NSDictionary *dictionry = @{@"name":@"yong",@"age":@22};
NSDate *date = [NSDate date]; //美国日期
NSData *data = [NSData data]; //二进制数据
//NSURL 网址
//NSOperationQueue 线程
//NSThread 线程
//dispatch_get_main_queue() 线程
/*
什么是类?
类是一组具有相同属性及行为的对象的组合
在OC中,类是由接口(interface)和实现(implement)两部分组成
.h 接口文件,用来实现属性的声明和方法的声明
.m 实现文件,用来实现属性和方法
什么是对象?
对象就是类的具体实现
*/
/*
创建和使用对象
OC创建对象的语法:
类名 *对象名 = [[类名 alloc]init];
或者
类名 *对象名 = [类名 new];
alloc 为对象动态分配内存地址,需要做内存管理,放在堆上面.需要做内存管理
init 在内存中填上初始值
堆:
栈:
new 为alloc 和 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-> = %@",stu->_name);
[stu sayHello];
NSString *stuString = [stu eatLunch];
NSLog(@"stuString = %@",stuString);
//手动创建一个类
Teacher *stu3 = [Teacher new];
stu3->_name = @"小黑";
[stu3 classBegin];
}
return 0;
}