object -C 学习指导
- iOS破解
- 2022-04-05
- 85热度
- 0评论

lesson 2 类和对象的概念
all ready studied seven class. and i should review my question .



C和OC的差异
OC是面向对象的语言
核心是对象,跟符合生活逻辑,有主语
C 面向过程的语言
核心是数据和算法, 符合数学逻辑。没有主语的成数据
打地鼠的游戏 , 你怎么写?
贪食蛇, 用面向对象的思想?
蛇, 吃蛋, 移动,变长
蛋, 可以移动 可以消失,可以出现,可以被吃
地图, 可以呈现蛇和蛋
面向对象编程
1,抽象对象
2,如何设计对象
3,怎么组合。
【类和对象的概念】
人。 张三丰。郭靖
书。 我的本红皮书, 你的那本小说, 葵花宝典
人 概念性的
头发。 什么颜色?
躯干。 多长?
唱歌。 会唱什么歌?
张三丰。 // 具体的。
头发。白色
躯干 一米
唱歌。太极之歌
郭靖
头发
躯干
唱歌
人 类
头发
躯干
唱歌。 // 可以根据。这3个特镇确定是人这个类。
类和对象的关系
对象是类的具象, 他可以准确的描述出各种特征的具体样子,
类是对象的抽象, 他旨在 描述一个概念。
如果从封装的角度看
结构体, 数据的封装
函数。 逻辑的封装
类。 数据和逻辑的封装 是一种更高级的封装
类的组成
特有属性: 身高, 体重,发色
特有行为: 唱歌,跳舞,学习
成员变量 记录类的特有属性
方法(函数) 记录类的特有行为

Lesson3 类和对象的语法

//
// main.m
// 类和对象
//
// Created by exp on 2022/4/6.
// Copyright © 2022 exp. All rights reserved.
//
#import <Foundation/Foundation.h>
/*
特有属性 成员变量
特有行为 函数(类里面的函数叫方法)
*/
//类的定义
@interface Person : NSObject {
//{}里面的内容都是负责描述类的特有属性的,称之为“成员变量”
double _high;//描述人的身高
double _weigt;//描述人的体重
}
// - 开头的方法, 是对象可以调用的
// + 开头的方法, 是类可以调用的
// 声明一个唱歌的方法, 可以被对象调用
// 不能在类的定义里写方法的实现
- (void)singTheSong;
//声明在类里面的函数就是方法
@end
@implementation Person
- (void)singTheSong{
printf("人在唱歌");
}
@end
void singTheSong(int a) {
//函数定义
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 实例化一个对象 oc用【】中括号来实现函数调用
/*
[Person new];;
[[Person alloc] init];
都是动态分配一个对象的内存,并初始化
*/
Person* xiaoMing = [[Person alloc] init];//实例化一个对象 动态分配一个对象的内存,并初始化
//[对象 实例方法]
//[类型 类型方法]
//让xiaoMing调用singTheSong方法
[xiaoMing singTheSong];
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
Lesson4 OC工程介绍
//
// main.m
// 了解OC的工程
//
// Created by exp on 2022/4/6.
// Copyright © 2022 exp. All rights reserved.
//
/*
头文件导入
#import 导入系统库文件 自动检查文件是否被重复导入
#import “用户自定义文件” 先查找用户目录,然后在查找系统库
#import <系统库文件> 直接查找系统库
Foundation 框架 系统库包 常用的类,结构体,函数,类型,宏 使用多个。h文件声明
Foundation.h 主头文件 里面导入了Foundation框架的所有文件
*/
#import <Foundation/Foundation.h>
/*
C .c
OC .m
C .h
OC .h
*/
// 主函数 程序的入口 唯一
int main(int argc, const char * argv[]) {
// 自动释放池
/*
// 帮我清理动态分配的工厂方法创建的对象
@autoreleasepool{//构建
写代码
} //销毁
*/
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!"); // 快速运行 command+R, 编译程序 command+B
// @“” OC的字符串类型 对象类型 有基本特征 有行为
// “” C的字符串类型 集合类型
// OC来源于 Jobs NextStep cocoa框架
// OC没有命名空间
//printf("Hello,work! "); 用 printf 是用来调试程序的,暴力调试程序的。
}
return 0;
}
Lesson5 OC类接口的分离
没人把方法和类构建在一个主文件里面。
可以使用command + N 添加一个类 class 文件。
/*
control+command+上下箭头 head&m 文件互切!
*/
按住 command 键,点击,可以查看 define定义 函数的定义。
如果用command+N 它会生成一个文件名header 和 obj函数M文件,一样的名字,类名并不需要和文件名保持一致。
//
// main.m
// 类的接口分离
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import <Foundation/Foundation.h>
// 使用import导入一个类所在的。h文件,而不是。m文件,就可以使用这个类了。
#import "Person.h"
#import "Student.h"
#import "TestOne.h"
/*
@interface Person : NSObject {
double _high;
}
// void say hello ();
- (void)sayHello;
@end
@implementation Person
- (void)sayHello {
NSLog(@"hello everyone ");
}
@end
*/
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person* xiaoming = [[Person alloc] init];
//消息机制
[xiaoming sayHello];
Student* mary = [[Student alloc] init];
[mary study];
// [mary sayHello]; //错误,学生类并没声明sayhello,方法 ,,,,so,这里不能被调用。
// 按住 command 键,点击,可以查看 define定义 函数的定义。
// TestTwo* test = [[TestTwo alloc] init];
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
//
// TestOne.h
// 类的接口分离
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface TestTwo : NSObject
@end
NS_ASSUME_NONNULL_END
//
// TestOne.m
// 类的接口分离
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import "TestOne.h"
//类名并不需要一定和文件名保持一致。
@implementation TestTwo
@end
//
// Student.h
// 类的接口分离
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/*
control+command+上下箭头
*/
@interface Student : NSObject
- (void)study;
@end
NS_ASSUME_NONNULL_END
//
// Student.m
// 类的接口分离
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import "Student.h"
@implementation Student
- (void)study {
NSLog(@"学生在学习");
}
@end
//
// Person.h
// 类的接口分离
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
//类的声明
@interface Person : NSObject{
double _high;
}
- (void)sayHello;
@end
NS_ASSUME_NONNULL_END
//
// Person.m
// 类的接口分离
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import "Person.h"
//Person类的实现
@implementation Person
- (void)sayHello{
NSLog(@"hello everyone ");
}
@end
Lesson6 Set和get的访问类&成员变量
成员变量的访问
//
// main.m
// 成员变量的访问
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
// 结构体不需要加下划线
struct Student {
char* name;
int age;
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
struct Student s1= {"dancer",20};
NSLog(@"name:%s age:%d",s1.name, s1.age); // 静态的用“.”访问成员变量
struct Student* ps1=(struct Student*) malloc(sizeof(struct Student));
ps1->name ="mary"; // 动态的用 ”->“去访问成员变量
ps1->age=19;
//对象的成员变量是默认受保护的,他的权限是比结构体的更高。不能随便访问
// init系统自带的初始化方法,默认是给基本数据类型赋值为0,或0.0,指针赋值为NULL,对象指针类型赋值为nil(给对象指针赋空值用的)
Person* xiaoming = [[Person alloc] init]; //类构建的对象是动态分配
//使用setter方法给小明的年龄赋值
[xiaoming setAge:19];
//使用getter访问小明的年龄
int xAge = [xiaoming age];
NSLog(@"age:%d",xAge);
//xiaoming->_age;
//xiaoming->_name;
//既然对象的成员变量有访问权限,如何公开这个权限呢?
// setter/getter方法
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
//
// Person.h
// 成员变量的访问
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject {
char* _name;
int _age; //这个age有下划线,特定的
}
// getter 方法,都是带返回值的,返回类型和访问的成员变量类型保持一致。
// getter ways, all bring the value; return type and access member varible type Be consistent
-(int)age; // 这是声明一个get方法
//避免使用get前缀,因为有特定的用法。跟你的成员变量名,保持一致,
// setter 方法,用来提供设置对象的成员变量的方法。
// 无返回值 void setAge(int age)
-(void)setAge:(int)age;
@end
NS_ASSUME_NONNULL_END
//
// Person.m
// 成员变量的访问
//
// Created by exp on 2022/4/5.
// Copyright © 2022 exp. All rights reserved.
//
#import "Person.h"
@implementation Person
- (int)age {
return _age; // 实现方法, 返回 _age的值
}
-(void)setAge:(int)age{
_age = age;
}
@end
