OC语言 OC初识-类与对象
来源:互联网 发布:shell 中执行 python 编辑:程序博客网 时间:2024/05/16 19:50
OC初识-类与对象
//
// main.m
// Kiwir-OC01
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年谭其伟. All rights reserved.
//
//OC语言的特点:p4
#import <Foundation/Foundation.h>
//按住com点它进入API(应用程序接口)
/*
在OC中,我们是使用#import指令来导入头文件的。
#import "<#header#>" //导入自定义类的头文件
#import <<#header#>> //导入ios框架类库里类的文件的。
Foundation框架是用来处理用户界面之下的层(layer)中的特性的,例如数据结构和通信机制。我们OC中的程序,都是以Foundation框架为基础的。
//作业
#include 与#import的区别? P21
*/
#import "Person.h"
#import "Student.h"
//相当于一个声明文件,声明一个类Teacher,基于NSObjict
@interface Teacher : NSObject
{
@public
NSString *_name;
}
-(void)classBegin ;
@end
//相当于实现
@implementation Teacher
-(void)classBegin
{
NSLog(@"%@ say class begin!",_name);
}
@end
int main(int argc,const char * argv[]) {
/*
自动释放池
自动释放池技术提供了一种机制,可以让我们将对象的所有权释放,但是不会导致对象马上被清理,例如用在一个方法返回一个对象中。
有以下三种情况我们可能会用自动释放池技术:
1.如果我们写的程序不是基于UI框架的,如命令行工具;
2.如果我们写的程序中有循环并且产生大量的临时对象;
3.如果你并发第二个线程。
通常我们不需要建立自己的自动释放池块。在OC中,以后需要在main函数中创建对象都在autoreleasepool中创建,让它来自动帮我们管理对象所有权的释放。
*/
@autoreleasepool {
// insert code here...
//NSLog()是系统提供的日志函数,用来在控制台打印出调式信息
NSLog(@"Hello, World!"); //NALog 与 printf函数的区别?
/*
面向对象的特征和概念
面向对象是现在主流的程序设计思想。面向对象是把构成问题事物分解成各个对象,然后协调各个对象之间的联系和通讯。建立对象之间的目的不是为了完成某一个步骤,而是为了描述某个事物在整体解决问题的步骤中的行为。
其基本思想是:使用类、对象、属性、方法(函数)以及封装、继承和多态等概念来进行程序设计。
*/
//OC中常用的数据类型,前缀:NS
NSInteger age = 25; //整型
NSUInteger age2 =25; //无符号整型
CGFloat source = 34.5; //浮点型
NSRange range ; //结构体 表示范围作用
CGPoint point ; //结构体
CGSize size ; //结构体
NSRect rect ;
NSString *string = @"My name is Rick";
char c = [string characterAtIndex:3]; //取下标为3的'n'
NSLog(@"c = %c",c);
//OC里面没有多维数组,只有数组嵌套数组
NSArray *array = @[@1,@2,@3,@4];
NSDictionary *dictioanry = @{@"anme":@"Rick",@"age":@25};
NSDate *date = [NSDatedate]; //美国日期
NSData *data = [NSDatadata]; //二进制数据
//NSURL 网址
//NSOperationQueue 线程
//NSThread 线程
//dispatch_get_main_queue() 线程
/*
什么是类? 类是一组具有相同属性及行为的对象的组合
在OC中,类是由接口(interface)和实现(implement)两部分组成
.h 接口文件,用来实现属性的声明 和方法的声明
.m 实现文件,用来实现属性和方法
什么是对象?类的具体实现
*/
/*
创建和使用对象
OC创建对象的语法:
类名 *对象名= [[类名 alloc] init];
或者
类名 *对象名= [类名 new];
alloc 为对象动态分配内存地址,需要做内存管理,放在堆上面。需要做内存管理
init 在内存中填上初始值
堆:?
栈:?
new 为alloc和 init 的简写
*/
Student *stu = [[Studentalloc] init];
//等价于
Student *stu1 = [Studentalloc];
stu1 = [stu1 init];
//或者
Student *stu2 = [Studentnew];
//如何给类中的属性赋值以及调用类中的方法
//属性赋值,通过 ->给实例变量赋值
stu->_name = @"小红";
stu->_age = 15;
stu->_address = @"广东";
stu->_hobby = @"看书";
NSLog(@"stu->name = %@",stu->_name);
[stu sayHello];
NSString *stuString = [stu eatLunch];
NSLog(@"stuString = %@",stuString);
//手动创建一个类
Teacher *stu3 = [Teachernew];
stu3 ->_name = @"小红"; //只能放在这一行
[stu3 classBegin];
}
Person *stu4 = [Personnew];
stu4->_name = @"小明";
stu4->_age = 25;
stu4->_hobby =@"sing";
[stu4 sayHello];
return 0;
}
//
// Person.h
// Kiwir-OC02
//
// Created by ibokan on 15/12/8.
// Copyright © 2015年谭其伟. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{ @public
NSString *_name; //字符串时要加*,下划线是命名规则
NSInteger _age;
NSString *_hobby;
}
/*
OC中的方法
方法:是类的功能代码,在(.h)文件中声明,在(.m)文件中实现。
语法:
-|+(返回类型)方法名:参数列表
{ .m中实现
//方法体
}
减号(-)表示实例方法,加号(+)表示类方法
*/
-(void)sayHello; //实例方法
-(void)sayHelloName:(NSString *)name // 函数名:(数据类型)名称
andAge:(NSInteger)age ; //name与之前的_name是不同的,如果用_name和_age的话要在main里先赋值,不然输出会显示null,要在main里赋值,又得对其的作用域改成@pubilic
// 或者加 _name = name,
//-(void)sayHelloName:(NSString *)_name
// andAge:(NSInteger)_age ;
//类方法
/*
注意
1.类方法可以调用类方法
2.类方法不可以调用实例方法,但是类方法可以通过创建实例对象来访问实例方法
3.类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量
4.类方法作为消息,可以被发送到类里面去,不能发送到对象里面去。(p24)
(只能通过类名来调用类方法,不可以通过对象调用类方法)
*/
+(void)sayHi;
+(void)hiGuys;
@end
//
// Person.m
// Kiwir-OC01
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年谭其伟. All rights reserved.
//
#import "Person.h"
@implementation Person
-(void)sayHello
{
NSLog(@"%@",_name);
NSLog(@"%d",(int)_age);
NSLog(@"%@",_hobby);
}
@end
//
// Student.h
// Kiwir-OC01
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年谭其伟. 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 受保护的,只有类本身和类的子类可以访问
没写就默认是protected类
@private 私有的,只有类本身才能访问
*/
}
//方法的声明
/*
减号(—)表明该方法是实例方法。类方法则用加号(+)。(p23-p24)
括号中void表示无返回值类型,其他类型还有 NSInteger,NSString类型等等。
*/
-(void)sayHello ; //实例方法
-(NSString *)eatLunch; //实例方法
+(NSString *)playGame; //类方法
@end
//
// Student.m
// Kiwir-OC01
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年谭其伟. All rights reserved.
//
#import "Student.h"
//在@implementation与 @end中实现接口文件声明的方法
@implementation Student
-(void)sayHello //无返回值,直接输出
{
NSLog(@"Hello everybody!!!");
}
-(NSString *)eatLunch
{
if (_age <18) { //有返回值就用 return返回
return [NSStringstringWithFormat:@"%@小姐,今晚有空吃饭么",_name];
}
else
{
return [NSStringstringWithFormat:@"%@小姐,今晚我没空吃饭",_name];
}
}
+(NSString *)playGame
{
return [NSStringstringWithFormat:@"I like playing LOL!"];
}
@end
//
// StudentSon.h
// Kiwir-OC01
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年谭其伟. All rights reserved.
//
#import "Student.h"
@interface StudentSon : Student
-(void)sayWord;
@end
//
// StudentSon.m
// Kiwir-OC01
//
// Created by ibokan on 15/12/7.
// Copyright © 2015年谭其伟. All rights reserved.
//
#import "StudentSon.h"
@implementation StudentSon
-(void)sayWord
{
//_name是@public修饰的,所有类都可以访问
NSLog(@"%@",_name);
//_age是@protected修饰的,该类与其子类都可以访问
NSLog(@"%d",(int)_age);
//_hobby是@private修饰的,只有该类本身可以访问
// NSLog(@"%@",_hobby);
}
@end
- OC语言 OC初识-类与对象
- OC语言学习01-类与对象
- OC-oc语言简介,类和对象
- OC--面向对象初识
- OC--类与对象
- OC---类与对象
- OC-类与对象
- 黑马程序员---【OC语言】01初识OC
- 黑马程序员—OC语言基础—类与对象
- Objective-c:OC语言简介、类与对象
- OC runtime 类与对象
- OC语言之OC对象和方法
- 初识OC
- OC初识
- iOS开发--OC篇--OC类与对象
- OC面向对象 类与对象
- OC语言中的类和对象
- 黑马程序员-OC语言-类和对象
- 北大OJ1001
- mysql参数调优
- Windows程序设计--创建第一个窗口
- ubuntu QQ
- 扫雷2
- OC语言 OC初识-类与对象
- PAT 1023 组个最小数
- Android如何反编译APK与资源文件
- 北大OJ1002
- 地理编码与反地理编码
- android wifi 无缝切换
- js中的open()函数相关的全部知识点
- 扫雷2
- CSU1256 天朝的单行道(spfa)