IOS基础

IOS基础

http://www.cocoachina.com
https://gsl201600.github.io/page/8/

一·类的成员变量和属性

Swift学习文档
1.成员属性
1.特点:成员属性是公共的用于暴露给其他的类访问,因为类会帮它自动创建get,set方法。
2.成员属性放在.h文件内,使用方法如下:

//声明
@property(nonatomic,strong)NSString *name;
//nonatomic允许多线程同时访问,但是不能保证线程安全,性能高
//atomic不允许多线程同时访问,但是能保证线程安全,性能低
//strong是强引用,
//copy
//weak
//assign//如引用,用于修饰基本类型

3.案例展示
在这里插入图片描述
2.成员变量
1.特点:成员变量是私有的其他类不能访问,只有通过get和set方法才可以对成员属性进行操作。
2.成员属性放在.m文件内,使用方法如下

//声明
@interface 类名()
{
 		NSString *name;//成员变量
}
//set和get方法
-(void)setName:(NSString *)name{
			this.name=name;
}
-(NSString *)name{
 return name;
}

3.案例展示
在这里插入图片描述

二·类的成员方法(函数)

1.类的成员方法
1.使用
①无参数,无返回值方法
1.需要在.h文件声明

-(void)functionName;

案例
在这里插入图片描述
3.在.m文件内实现

-(void)functionName{
}

案例
在这里插入图片描述

②有参数,无返回值方法
1.声明

-(void)functionName:(参数数据类型)参数名;

案例
在这里插入图片描述
3.实现

-(void)functionName:(参数类型)参数名{
}

案例
在这里插入图片描述
③无参数,有返回值
1.声明

-(NSString)function;

2.实现
-(NSString)function{
}
案例
在这里插入图片描述
④.类方法的调用
类的声明

Persion *persion=[[Persion alloc]init];

调用方法

[persion functionName]

案例
在这里插入图片描述
⑤构造方法
1.功能
构造函数主要用于初始化操作,在类被创建的时候被调用
2.构造函数的使用

-(instancetype)init
{
 	self=[super init];
 	if(self)
 	{
 		NSLog(@"我是构造函数");
 	}
}

案例
在这里插入图片描述
⑥析构方法
1.功能
主要用于类使用完之后的空间释放(现在已经不需要手动去释放空间了),在类被释放掉的时候调用析构函数
2.使用

-(void)dealloc{
}

案例
在这里插入图片描述
⑦实例方法和类的方法
1.实例方法介绍
实例方法是类被实例化后实例调用的方法
2.声明

-(void)function;

案例
在这里插入图片描述
3.类的方法介绍
类的方法是直接用类名调用的方法,不需要实例化(和JAVA静态方法有点相似)
4.声明

+(void)function;

案例
在这里插入图片描述

5.实现

+(void)function{
}

在这里插入图片描述

三·类的关键字

1.self关键字
①self关键字的介绍
self代表的是调用者,在方法内部代表的是当前方法的实例。
②使用

[self 本类的方法];

案例
在这里插入图片描述
2.继承
①继承的介绍
只要一个类继承了父类,他就拥有了成员暴露出来的所有成员变量和方法
②.使用
在.h文件继承

@interface 本类:父类

案例
在这里插入图片描述
2.super关键字
①super关键字的介绍

super是编译器指示符,仅仅是一个标志,并不是一个指针,是标志的当前对象去调用父类的方法,本质上还是当前对象调用,并不是让父类对像调用方法,调用者还是本身。

②使用

[super fuctionName]//调用父类方法
super.name //获得父类属性

案例
在这里插入图片描述

四·字符串

1.字符串的截取
①从头开始截取

NSString *str=@"HeadCenterEnd";
//重从头部截取4个字符
NSString *tempStr=[str substringToIndex:4];
//tempStr=Head

②从尾截取

NSString *str=@"HeadCenterEnd";
//重从尾部截取3个字符
NSString *tempStr=[str substringFromIndex:str.length-3];
//tempStr=End

③截取中间的一个区域的字符

NSString *str=@"HeadCenterEnd";
//创建一个区域对象
NSRange range;
range.location=4;//开始索引
range.length=6;//截取的长度
//重从尾部截取3个字符
NSString *tempStr=[str substringWithRange:range];
//tempStr=Center

2.字符串的替换
//①替换某一段字符

NSString *str=@"HeadCenterEnd";
NSRange range=NSMakeRange(4,6);//区域对象
NSString *tempStr=[str stringByReplacingCharactersInRange:range withString@"Middle"];
tempStr=@"HeadMiddleEnd";

//②替换字符串中的字符

NSString *str=@"AADDCC";
NSString *tempStr=[str stringByReplacingOccurrencesOfString:@"DD" withString@"BB"];
tempStr=@"AABBCC";

3.分割字符串

NSString *str=@"name:xiaoming;age:11;height:170";
NSArray *tempArray=[str componentsSeparatedByString:@";"];
//输出结果
name:xiaoming,
age:11,
height:170

4.字符串的拼接

NSString *age=@"年龄";
int mun=15;//基本类型不需要*
NSString *temp=[NSString stringWithFormat:@"%@:%d",age,mun];//引用类型用@占位符
//输出结果
年龄:15

五·数据类型

1.数据类型

int     1,2,3
char   'a','b','c'
array    {1,2,3}
NSString   字符串引用类型
NSInteger   int
CGFloat    float
NSRange   范围
NSNumber   对象引用类型
字典				
Bool      YES or NO

2.NSInteger

NSInteger a;
a=1;
NSInteger b=2;

3.CGFloat

CGFloat b;
b=2.3;
CGFloat a=1.3;

4.NSNumber

//int
int a=2;
NSNumber *number=[NSNumber numberWithInteger :10];
a+=number.integerValue;


//float
NSNumber *number=[NSNumber numberWithFloat:1.6];
int c=0.4+number.floatValue;

5.NSArray
①不可变数组

NSArray *array=[[NSArray alloc]initWithObjects:@"a",@"b",@"c",nil];//创建并赋值
NSArray *array2=[[NSArray alloc]initWithArray:array];//创建并赋一个数组
NSArray *array3=[NSArray arrayWithArray:array];//使用类方法创建并赋值;
NSArray *array4=[NSArray array];//使用类方法

②可变数组

NSMutableArray *marray=[[NSMutableArray alloc]init];//使用构造方法创建
NSMutableArray *marray2=[NSMutableArray arrayWithCapacity:100]//创建并设置大小
NSMutableArray *marray3=[NSMutableArray arrayWithObjects:@"a",@"b",@"c",nil];//创建并初始化值
NSMutableArray *marray4=[NSMutableArray alloc]initWithArray:array];//创建并赋值一个不可变数组

③操作可变数组

NSArray *array=[[NSArray alloc]initWithObjects:@"a",@"b",@"c",nil];//创建并赋值
NSMutableArray *marray=[[NSMutableArray alloc]init];//使用构造方法创建
//添加一个对象
[marray addObject:<对象>];
//添加一个不可变数组
[marray addObjectsFromArray:array];
//删除指定对象
[marray removeObject:@"a"];
//删除最后一个对象
[marray removeLastObject];
//根据索引删除指定对象
[marray removeObjectAtIndex:0];
//删除所有对象
[marray removeAllObjects];

6.字典
①不可变字典

NSDictionary *dic=[[NSDictionary alloc]init];//构造方法创建
NSDictionary *dic=[NSDictionary dictionaryWithObject:@"value" forKey:@"key"];//类方法创建只有一对键值对的字典
NSDictionary *dic=@{
			@"name":@"xiaoming",
			@"age":@"15"
}//声明字典赋值
NSDictionary *dic=[NSDictionary dictionaryWithDictionary:dic];//类方法创建并赋值一个不可变字典
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"name",@"xiaoming",@"age",@"11",nil];//类方法创建并赋值

②可变字典

NSMutableDictionary *mdic=[[NSMutableDictionary alloc]init];//构造方法创建
NSMutableDictionary *mdic=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"name",@"xiaoming",@"age",@"11",nil];//类方法创建并赋值
NSMutableDictionary *mdic=[NSMutableDictionary dictionaryWithDictionary:mdic];

③可变数组的操作
NSMutableDictionary *mdic=[[NSMutableDictionary alloc]init];
//添加
[dic setObject:@“xiaoming” forKey:@“name”];
//修改
[dic setObject:@“xiaofang” forKey:@“name”];
//删除指定
[dic removeObjectForKey:@“name”];
//删除所有
[dic removeAllObjects];
//获得所有Key
NSArray *keyArray= [dic allKeys];
//遍历
for(id key in dic)
{
NSLong(@“key:%@ value:%@”,key,[dic objectForKey]);
}

六·内存管理

1.ARC(自动管理内存)
现在使用的是ARC自动内存管理,不需要我们管理内存。
2.MRC(手动管理内存)
①管理过程:
核心:谁创建谁释放,用计数器判断。
当我们调用alloc/new/copy/mutablecopy/retrain 会导致计数器加1(每加1就要占内存)。
要通过release方法释放内存([object release]);
②原则
自己生产的对象,自己持有。
非自己产生的对象,自己也能持有。
不在需要自己持有对象的时候,释放。
非自己持有的对象无需释放

六·Objective-c的语言特性

1.类目(类别)
①类目的介绍
类别(category)是Objective-C语言的新特性,为现在的类添加新方法的方式。比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现,用类目就可以实现在没有类的源代码的条件下为类添加新的方法。
通过类目加入的方法会成为原始类的部分。列如:通过类目为NSString添加方法,编译会把这些方法加入NSString的定义里;类目里定义的方法可以干任何原始类中方法能干的事,在运行时他们是平等对待的;类目里定义的方法也会被原始类的子类所继承,就跟原始类的其他方法一样。
②类目的局限性
a,无法添加新的实例变量。
b,若在类目中覆盖现有类的原有方法。这样会引起super消息的断裂,因为类目中的方法具有更高的优先级,因此,一般不要覆盖现有类中的方法
③使用类目
a.创建
在这里插入图片描述
b.生成的类
在这里插入图片描述
c.添加方法的声明
在这里插入图片描述
d.添加方法的实现
在这里插入图片描述
e.使用
在这里插入图片描述
2.延展
①简介
延展Extension,是为类扩充私有的方法,以及私有的实例变量,和分类Category相比,延展定义的方法是有私有的,而且还可以定义实例变量(私有的)。
②使用
以@interface开头+类名(哪一个类的延展)+小括号,小括号内填写的是延展名,一般情况下都省略。@end结束(写在.m文件里);
③案例
在这里插入图片描述
3.协议(相当于Java里面的interface)
①简介
Protocol(协议)用来声明一些方法,或者说,Protocol是由一系列的方法声明组成的。一个类只要遵守了Protocol,就相当于拥有了Protocol的所有方法声明。
一个Protocol只要遵守了其他Protocol,就相当于拥有了其他Protocol的所有方法声明。
既然Protocol只能声明方法,那么方法的实现自然写在类的实现文档.m里面。
②使用
@required
-(void)xxx;
@optional
-(void)xxxx;
@required之下的方法是必须实现的,不然编译器会发出报错;
@optional之下的方法是可选实现的。
③案例
a.创建Protocol
在这里插入图片描述
创建后会生成.h文件
b.声明方法
在这里插入图片描述
c.遵守协议
在这里插入图片描述
d.实现方法
在这里插入图片描述
4.KVO(key-value-observer)
①简介
KVO:当某个属性的值发生变化的时候,通知观察这,也就是说,当某一个对象的属性调用setter方法的时候,通知观察者,所以,KVO本质上其实是一个观察者模式。
②使用
a.成员声明属性
在这里插入图片描述
b.创建实例
在这里插入图片描述
c.对实例属性进行监控
在这里插入图片描述
c.实现代理
在这里插入图片描述
4.KVC(key-value-coding)
①简介
KVC:是一个基于NSKeyValueCoding非正式协议实现的机制,他可以直接通过key值对对象的属性进行存储操作,而且不需要通过调用明确的存取方法。这样就可以在运行时动态在访问和修改对象,而不是在编译时确定。
KVC提供了一种间接访问属性方法成员变量的机制,可以通过字符串来访问对象的属性方法或成员变量。
②使用
a.在.h文件里面声明成员属性

在这里插入图片描述
b.声明对象
在这里插入图片描述
c.对属性进行赋值
在这里插入图片描述
d.获得值
在这里插入图片描述
c.多级赋值
在这里插入图片描述
d.多级获得值
在这里插入图片描述
5.单例
①简介
简单的来说,一个单例类,在整个过程中只有一个实例,并且提供一个类方法共全局调用,在编译时初始这个类,然后一直保存在内存中,直到退出时由系统自动释放这部分内存。
②使用
a.第一步(必不可少的)

+ (instancetype)sharedSingleton {
    static Singleton *_sharedSingleton = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //不能再使用alloc方法
        //因为已经重写了allocWithZone方法,所以这里要调用父类的分配空间的方法
        _sharedSingleton = [[super allocWithZone:NULL] init];
    });
    return _sharedSingleton;
}

b.第二步
防止alloc] init] 和new引起的错误,因为alloc] init] 和 new 实际是一样的工作原理.都是执行了下面方法

// 防止外部调用alloc 或者 new
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    return [Singleton sharedSingleton];
}

c.第三步
防止copy引起的错误,个人感觉当你的单例类不遵循NSCopying协议,外部调用本身就会出错. 如果不是业务需求不遵循协议,该方法也可以不写

// 防止外部调用copy
- (id)copyWithZone:(nullable NSZone *)zone {
    return [Singleton sharedSingleton];
}

d.第四步
防止mutableCopy引起的错误,个人感觉当你的单例类不遵循NSMutableCopying协议,外部调用本身就会出错. 如果不是业务需求不遵循协议,该方法也可以不写

// 防止外部调用mutableCopy
- (id)mutableCopyWithZone:(nullable NSZone *)zone {
    return [Singleton sharedSingleton];
}

6.通知
①创建通知
在这里插入图片描述
②注册通知
在这里插入图片描述
③实现通知方法
在这里插入图片描述
7.目标动作回调
目标就是接受事件的对象

动作:事件反馈所要触发的方法
在这里插入图片描述
在这里插入图片描述

8.回调-委托模式
①使用方法
a.创建一个协议
在这里插入图片描述
b.创建一个Clock对象来当做Person对象的代理
1.Clock对象继承协议并实现协议在这里插入图片描述
在这里插入图片描述
2.创建Person类同样继承协议并且声明代理成员属性
在这里插入图片描述
3.初始化Person和Clock并且将Clock赋值给代理成员属性,然后代理属性就能使用了
在这里插入图片描述
9.Block
①简介
代码块Block是苹果在IOS4开始引入的对C语言的拓展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量,作为参数,作为返回值Block被广泛运用。
注:block的声名与赋值只是保存了一段代码块,必须调用才能执行内部代码。
②使用()
a.首先在目标对象声明一个Block
在这里插入图片描述
在这里插入图片描述
b.在回调对象中实现Block代码块
在这里插入图片描述
在这里插入图片描述
c.在目标对象中调用Block代码块
在这里插入图片描述
在这里插入图片描述
③把block当做参数
a.声明函数
1.第一种在这里插入图片描述
2.第二种
在这里插入图片描述
b.block代码块实现
在这里插入图片描述
c.将方法赋值给block
在这里插入图片描述
注意:循环引用(会造成内存泄漏)
a.将block转为弱引用
在这里插入图片描述
b.block赋值
在这里插入图片描述

七·UI控件

1.页面生命周期
①页面初始化
在这里插入图片描述
②页面将要出现
在这里插入图片描述
③页面已经出现
在这里插入图片描述
④页面将要消失
在这里插入图片描述
⑤页面已经消失
在这里插入图片描述
⑤页面释放
在这里插入图片描述
⑤页面单机事件
在这里插入图片描述
2.UILable
在这里插入图片描述
3.UIButton
在这里插入图片描述
4.UIView
在这里插入图片描述
5.UITextFiled
在这里插入图片描述
代理方法
在这里插入图片描述
6.UIImage
在这里插入图片描述
7.UITableView
①声明UITableView成员属性
在这里插入图片描述
②初始化UITableView
在这里插入图片描述
④注册Cell
在这里插入图片描述
⑤实现代理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
tableView系统左滑删除左滑动置顶链接

8.UICollectionView
①声明UICollectionView
在这里插入图片描述
②初始化UICollectionViewFlowLayout
在这里插入图片描述
③初始化UICollectionView
在这里插入图片描述
④注册UICollectionCell
在这里插入图片描述
⑤代理
在这里插入图片描述
在这里插入图片描述
9.WKWebView
WKWebView完整版
①声明WKWebView
在这里插入图片描述
②初始化WKWebView
在这里插入图片描述
③设置Url
在这里插入图片描述
④代理方法
在这里插入图片描述
完整篇https://www.jianshu.com/p/5cf0d241ae12

10.UIalertController
在这里插入图片描述

八,ViewController

1.UINavigationController
①设置UINavigationController的根视图
在这里插入图片描述
②设置子页面
在这里插入图片描述
③UIBarButtonItem
在这里插入图片描述
在这里插入图片描述
2.TabBarController
①大致框架
在这里插入图片描述
②设置字体颜色
在这里插入图片描述
③设置原图片颜色
在这里插入图片描述
④设置TabBar背景不透明
在这里插入图片描述
3.跳转
①push和present区别
a.push与present都可以推出新界面。
b.present与dismiss对应,push和pop对应。
c.present只能逐级返回,push所有视图由视图栈控制,返回上一级,也可以返回到根vc,其他vc。
present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换。
②present
a.跳转
在这里插入图片描述
b.返回
在这里插入图片描述
③push
a.跳转
在这里插入图片描述
b.返回
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.页面布局
①横竖屏控制
a.设置允许设置横竖

((AppDelegate *)[UIApplication sharedApplication].delegate).allocRotation=YES;

b.创建UIDevice的延展并添加设置屏幕控制状态
1)创建延展
在这里插入图片描述
2)声明set横竖屏状态方法

+(void)setNewOrientation:(UIInterfaceOrientation)orientation;

3)实现set横竖屏状态方法

+(void)setNewOrientation:(UIInterfaceOrientation)orientation{
    NSNumber *resetOrientationTarger=[NSNumber numberWithInteger:UIInterfaceOrientationUnknown];
    [[UIDevice currentDevice]setValue:resetOrientationTarger forKey:@"orientation"];
    NSNumber *orientationTarger=[NSNumber numberWithInt:orientation];
    [[UIDevice currentDevice] setValue:orientationTarger forKey:@"orientation"];
}

③调用修改横竖状态的方法

 [UIDevice setNewOrientation:UIInterfaceOrientationLandscapeRight];

注意记得导入头文件

#import "UIDevice+Direction.h"
#import "AppDelegate.h

5UIDevice和UIScreen
①UIDevice
在这里插入图片描述
②UIScreen
在这里插入图片描述
6.手势
①点击
在这里插入图片描述
在这里插入图片描述
②轻扫
在这里插入图片描述
③长按
在这里插入图片描述

九,IOS实用功能

1.定制Cell
在这里插入图片描述
2.请求网络数据
①导入第三方库
AFNetworking
②调用请求网络数据异步代理方法
在这里插入图片描述
3.下拉刷新
①导入第三方库
MJRefresh
②调用下拉刷新的代理方法
在这里插入图片描述
③结束
在这里插入图片描述
4.上拉加载
①导入第三方库
MJRefresh
②调用上拉加载的代理方法
在这里插入图片描述
③结束
在这里插入图片描述
5.沙河目录
简介:沙河目录是一个用来存放本地持久化数据的文件夹,里面的数据在app更新是数据也不会被销毁,只有在APP被卸载的时候才会被销毁

①沙河目录

NSString *homePath=NSHomeDirectory();
NSLong(@"homePath=%@",homePath);

②document目录
a.路径

NSString *documentPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).firstObject;

b.存取持久化小数据
在这里插入图片描述
c.plist存取
在这里插入图片描述
6.FMDB
①导入第三方库
FMDB

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值