Object-C(自学1)

 

----- 需求索要 自学了下 OBJECt-C  -----

 

就基础部分一些 和操作

command + R 运行
command +B 只编译.m文件

NSlog() = printf
NSLog 是自动换行的

#import <Foundation/Foudation.h>
<> 引用的是我们系统的库,找到就有


#import "Person.h"

//""引用的是我们自己的类

.h文件只负责声明 不实现
.m文件实现声明的方法

在Main
// 类名 *变量的名字 = [[类名 alloc]init]
Person *per = [[Person alloc]init];
[Per eat];

-(void)eat;
//对象方法命名规则
1.以-号开头
2.所有的数据类型放在()里面,而且只有数据类型放在()里面。
3.方法名准驼峰原则。

带参数的方法命名规则
1.对象命名前3条准守
2.一个参数带着:号,冒号写在参数类型前面
3方法名想写个句子:
-(void)eatApp:(int)num;

Person *per = [Person new];
[per run];
[per eatApp:5];


set get 方法
-(void)setAge:(int)age{
_age = age;
}


//**set方法
1.以-号开头
2.不需要返回值
3.set开头,后面是对象的成员变量去掉下划线首字母大写
4.只有一个参数
-(void)setAge:(int)age;
//get 方法为了取值的
1.以-号开头
2.返回值类型对应成员变量的类型
3.方法名为对应成员变量去掉下划线部分
4.不需要参数
-(int)age;

->指向符
直接赋值 通过->直接给属性赋值,会得到脏数据(了解)

类:不需要声明一个对象(实例)就可以直接调用的方法,有返回值
// 对象方法求2个和
-(int)sumWithNum1:(int)num1 andNum2:(int)num2;
//类方法求和
1.以+开头
2.其他规则与对象方法的规则(除去第一条)相同
+(int)sumWithNum3:(int)num3 andNum4:(int)num4;

//對象方法中可以直接使用成員變量
//类方法中不能直接使用成员变量
int sum=num3+sum4;

Person *per = [Person new];
int sum = [cal sumWithNum1:5 andNum2:6];
对象方法:
》对象调用
》以-号开头
》可以直接使用成员变量
》可以调用自己的对象和类方法

//类方法
》有类名调用
》以+号开头
》不能直接使用成员变量
》用作工具方法
》只能调用自己的类方法,不能调用自己对象方法


----点语法 :就是set get 方法
赋值不这么写
//[per setAge:18];
per.age = 18;


--property(合成存储器)。
// 组成: @property 对应成员变量的类型 对应成员变量去掉下划线后的部分
//作用; 自動生成对应的成员变量的set . get 方法的定义
@property int houseNum;

对应的 synthesize 对应的方法名
--property(加强版)
@property(nonatomic,assign)int houseNum;

----继承(继承父类的)
如果成员变量可以被继承,需要手动生成

--super:代表是父类的对象指针或者父类类名
使用场合:在子类中调用父类中方法
[super run]
先调用父类的 如果子类还有在调用子类的
----重写(子类和父类同名 ,优先执行子类中同名的方法)
目的(为了在与父类同名方法中完成一些自己的功能)

-----self(用来表示OC中的类名或者对象指针)
1.在对象方法中代表对象指针(自己)(谁调用的对象方法,那么self就代表谁)
在类方法中代表类名
2.可以调用方法和成员变量
3.禁止用自己(死循环)

字符串 NSString *string1 =@"样安抚"
//%d %f 基本的数据类型的占位符
%@ 代表打印的对象
stringWithFormat (格式化拼接字符串)
重写desciption 方法
目的(当一个对象的属性很多时,并且需要打印,那么就重写description,达到简写代码)

----变量作用域
@public 整个程序
@protected 本类和子类中
@private 本类中(用property自动生成)
@package 包内部

多态:一种事物的多种形态(前提:继承)
父类类型的指针指向子类对象 Animal *an = [Dog new];


----- 构造方法:
开辟内存空间 alloc
初始化 init
返回地址 init

以init开头,必须准守驼峰原则
id:万能指针,可以指向任意的对象 -(id)initwithAge:(int)age;

-(id)init{
1.判断self 是否为上一步初始化
2.添加自己类的功能
3.将自己返回
}

NSMakeRange(5,2)区间
NSMutable
--ObjectAtIndex

可变数组: NSMutableArray *phoneArray;


----单例
很霸道,很专一
定义:一个类,只允许通过“类方法”创建一个对象,调用这个类属性和方法时
只能通过这一个对象去调用,
作用:1.保值 :static
2.建立一个公共的访问点,在需要使用的时候调用即可

static Card *sing =nil; ( static 保存上一步的sing的数据)


-----NSData类 一种数据类型
//在传输数据时,传输的是二进制文件

---------协议:一组方法的列表
特点:只有定义,没有实现。实现在准守(引用)了该协议的类的.m文件
实现部分里面 (可以删了.m文件)
霸道
构成: NSObject:基协议
@protocol 协议名<NSObject>
方法定义的列表
@end


-------代理 :委托,是一种设计模式

协议一般放到主动的类中(有需求的类) (懶惰的類)
被动类: 代理类
协议代理名 :当前类名Delegate


-----自动释放池
在main.m @autoreleasepool {
本质上是一个数组,用来存储多个对象,在离开释放池的时候
系统会自动的给池中每个对象发送一个release 消息
}

// 堆和栈
栈 堆
person *per = [[Person alloc]init];
根本区别: 栈趋于低的内存空间 不连续
堆趋于高的内存空间 连续空间


// 进程:
在系统中正在运行的一个应用程序

//多线程
一个进程可以开启多条线程,每条线程可以并行折行不同的任务

//主线程
NSThread *mainThread = [NSThread mainThread];


// NSURLSession
使用创建TASK ,然后执行Task
nsurlsessionDataTask (请求)
download (下载)
upload(上传)

//AFN 简单介绍

 

posted @ 2019-11-19 11:48  -鹿-  阅读(237)  评论(0编辑  收藏  举报