网络加载还没有完毕,这时点击返回后调用了加载失败的回调方法
UI种类:
一进入界面的时的默认UI
网络慢时正在加载的UI
网络正常时的UI (有时需要分wifi 、 移动数据)
网络连接失败时的UI
有网/无网,有GPS/无GPS等来回切换时,界面UI的显示情况
若正在执行动画时程序进入后台,再进入前台时要怎么显示
程序一启动就执行main函数,然后再执行UIApplicationMain方法,创建UIApplication对象,和UIApplication的代理对象并设置为他的delegate属性, 代理循环监听事件,程序启动完毕会执行application:didFinishLauchingWithOptions
============================================================
运行时验证对象功能
对象会在运行时验证三种重要信息:
-
它是否是特定类或其子类的实例
-
它是否响应某个消息
-
它是否遵守某些协议
interface builder :编辑storyboard和xib文件的东西就是IB
发消息就是调用方法的意思
监听事件的方法: (基本控件)addTeget… 代理 通知
数据传递:
顺传用通知 逆传用代理
Student *s1 = [s copy];
=================================================================================================================
// ios模拟器的位置 :/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
// 文档安装位置:/Applications/Xcode.app/Contents/Developer/Documentation/DocSets
//注意点:文件中不能有更高版本的文档,否则只会显示最高版本
类方法的好处和使用场合
1> 不依赖于对象,执行效率高
2> 能用类方法,尽量用类方法
3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
可以允许类方法和对象方法同名
1.继承的好处:
1> 抽取重复代码
2> 建立了类之间的关系
3> 子类可以拥有父类中的所有成员变量和方法
重写:
1.重写:子类重新实现父类中的某个方法,覆盖父类中同名方法(不需在.h文件中声明,直接在.m文件中实现父类中的同名方法)
2.注意
1> 父类必须声明在子类的前面
2> 子类不能拥有和父类相同的成员变量
3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找
2.坏处:耦合性太强
1.继承的使用场合
1> 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2> 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类
super的作用
1.直接调用父类中的某个方法
2.super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
3.使用场合:子类重写父类的方法时想保留父类的一些行为
多态
1.没有继承就没有多态
2.代码的体现:父类类型的指针指向子类对象
3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
4.局限性:
1> 父类类型的变量 不能直接调用子类特有的方法。必须强转为子类类型变量
后,才能直接调用子类特有的方法,如果调用的是被之类重写的方法,则实际
调用的是子类的方法
description:在NSLog()方法中用%@打印对象时,会调用该对象的descriprion方法
把数据独立出来:放网络上 or 放在文件(如.plist文件)里
成员变量作用域:
@public : 在任何地方都能直接访问对象的成员变量
@private : 只能在当前类的对象方法中直接访问(@implementation中定义的变量默认是@private)
@protected : 只能在当前类及其子类的对象方法中直接访问(@interface中默认就是@protected)
@package : 只要处在同一个框架中,就能直接访问对象的成员变量
@interface和@implementation中不能声明同名的成员变量
UIViewController和UIView的关系?
前者负责创建和销毁后者,并可以监听处理后者中的按钮的事件等
程序的运行过程?
程序一启动就读取main.storyboard文件,并创建箭头所指的控制器和控制器内部的view,还有view的子控件,再把view现实在屏幕上
storyboard:描述软件界面 iOS5以后都用这个
xib:描述软件局部界面 iOS5之前用这个
=======================================
-f-objc-arc
-fno-objc-arc
SEL s2 =@selector(call:);
[pero performSelector:s2withObject:@"7897655"]; // 后面一个是所调用的call:方法的参数
=======================================
//把C语言字符串转换成 OC中的字符串对象
NSString * str = [NSStringstringWithUTF8String:"123abc"];
========================================
// 去除字符串中的所有空格(包括左右两边和中间的空格)
NSString *string =@" Hello this is a long string! ";
// 去除左右空格
string = [string stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];
// 把字符串中的空格替换成空
string = [string stringByReplacingOccurrencesOfString:@" "withString:@""];
//从给定的索引值开始(包含该索引位置),一直截取到字符串末尾
NSString * str = [str substringFromIndex:4];
//从位置0开始,到给定的索引位置(不包含该索引位置)
NSString * str = [str substringToIndex:4];
// 从第4个字符开始(包含第4个字符), 截取6个字符
NSString * strtmp3 = [str substringWithRange:NSMakeRange(4, 6)];
//获得子字符串的位置
//tempRange.location == NSNotFound表示没有找到子字符串出现的位置
NSRange tempRange = [str rangeOfString:@"abc"];
==与 isEqualTostring比较两个字符串的区别
1. == 号比较的只是两个字符串的指针地址是否相等
2.isEqualTostring 是先比较字符串的指针地址是否相等,如果不等再取出两个字符串中每个字符逐个比较
//可变长度字符串, 继承自NSString
NSMutableString * strMut = [NSMutableStringstring];
//相当于初始化字符串对象的值
[strMut setString:@"AAA"];
//在字符串末尾追加新的字符串
[strMutappendString:@"BBB"];
//循环遍历数组时,不能动态的删除/添加元素,以下写法错误
for (NSString * strin array)
{
[array removeObjectAtIndex:1];
NSLog(@"str %@",str);
}