iOS知识点
// 当XIB 中的文件加载完成会调用此方法
xib 存储在硬盘中。 当你没有使用的时候它是不会加载到内存的。当你调用的时候加载到内存
-awakeFromNib
{
}
-(void)viewDidLoad
此方法在ViewController 实例中的view 被加载完毕后调用,如需要重定义某些要 在view 加载完毕后立刻执行的动作或者界面修改,则应该把代码写在此函数中。
// app启动完毕时调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
知识点:
strong 数组 OC 对象
weak UI控件 代理对象
assign 基本数据类型 数值类型 bool 结构体
copy 字符串NSString
知识点:查看文件路径 方法一:NSLog(@“ %@“,NSHomeDirectory());
方法二: 打个断点po NSHomeDirectory () 查看资源路径知识点:ViewController 的生命周期(Life Circle)loadView -> viewDidLoad ->viewWillAppear -> viewDidAppear ->viewWillDisappear ->viewDidDisappear -> dealloc loadView:一般情况下不用用到,除非需要重写设置View;viewDidLoad/dealloc:视图加载完成之后的设置和视图销毁的时候调用;viewWillAppear/viewWillDisappear:视图即将呈现和视图即将消失;viewDidAppear/viewDidDisappear:视图展现在屏幕的时候和视图完全消失在屏幕的时候调用,默认不做任何操作;如果
知识点: Xcode 7 中多了一个LaunchScreen,storyboard. 用来设置启动界面,如果没有启动页面,默认她的屏幕的大小是4s的大小知识点:
1. { int _age }_age 成员变量以下划线开头的好处,就是可以用于区分局部变量和成员变量。2. 属性变量里面有一个实例变量 _myButton@property (nonatomic, strong) UIButton *myButton;成员变量: _size 成员变量以下划线开头的好处,就是可以用于区分局部变量和成员变量。@interface MyViewController :UIViewControlle{UIButton *yourButton;int _count;id data;}成员变量用于类内部,无需与外界接触的变量。成员变量默认是protected,一般情况下,非子类对象无法访问因为成员变量不会生成set、get方法,所以外界无法与成员变量接触成员变量是定义在{}号中的变量,如果变量的数据类型是一个类则称这个变量为实例变量。因为实例变量是成员变量的一种特殊情况,所以实例变量也是类内部使用的,无需与外部接触的变量,这个也就是所谓的类私有变量。局部变量:-(void)viewDidLoad{// 局部变量NSArray *array = [[NSArray alloc] initWithObject:@“123”,nil];}局部变量是根据其生存周期定义的,在源文件中的array,其生命周期是在以“{ }”为界限的代码块中,虽然它的名称与成员变量相同,但不是同一个变量。属性变量:@interface MyViewController :UIViewControlle@property (nonatomic, strong) UIButton *myButton;@end因为编译器会自动为你生成以下划线开头的实例变量_myButton,不需要自己手动再去写实例变量。而且也不需要在.m文件中写@synthesize myButton,也会自动为你生成setter,getter方法。属性变量是用于与其他对象交互的变量。属性变量的好处就是允许让其他对象访问到该变量(因为属性创建过程中自动产生了set 和get方法)。当然,你可以设置只读或者可写等,设置方法也可自定义。现在大家似乎都不怎么喜欢用成员变量来定义类的变量,都喜欢用属性变量来定义类的变量。把需要与外部接触的变量定义在.h文件中,只在本类中使用的变量定义在.m文件中。实例变量:实例变量本质上就是成员变量,只是实例是针对类而言,编译器会自动为你生成以下划线开头的实例变量 _myButton,也会自动为你生成setter,getter方法。如果.m文件中写了@synthesize myButton,那么生成的实例变量就是myButton;如果没写@synthesize myButton,那么生成的实例变量就是_myButton。全局变量: 定义:在@implementation外定义的变量(在@implementation中定义也是可以但是一般不这么干)举例://规范的 static int hu=3;//全局变量NSString*sttr1=@"S1ViewController";//全局变量@implementation S1ViewController@end
知识点:Nib nib是3.0版本以前的产物,在终端下我们可以看到,NIB其实是一个文件夹,里面有可执行的二进制文件;Xib xib是一个基于xml ( 可扩展标记语言 ) 的描述文件,可以实现可视化编程。无论nib也好,xib也好,最终在执行UIViewController生命周期函数loadView之前,都会转化成可执行的nib文件。// static 是只有这个文件可以访问。 const 防止其他文件去改static NSString *const MIOCellId = @"cell";Storyboard:storyboard是多个xib文件集合的描述文件,也采用xml格式。那么storyboard与xib比较,区别在于:一个工程中可以有多个xib文件,一个xib文件对应着一个视图控制器和多个视图。而使用storyboard时,一个工程只需要一个主storyboard文件就可以了。因此,在包含多个视图控制器的情况下,采用storyboard管理比较方便,而且storyboard还可以描述界面之间的导航关系。加载过程:当app 启动时,UIApplicaiton 会自动加载main.storyboard 文件。 同时,会自动加载 main.storyboard 上的第一个视图控制器 (view controller),并且,将该 view controller 所对应的 View 加载到UIWindow 对象中。 #import#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
这行代码的作用是,将app delegate class 传给 UIApplicationMain。 因为整个App 启动和运行的入口,就在UIApplicationMain中。
需求:常见知识点
1.方法名字 带有冒号的 都是有参数的
2.[self setNeedsDisplay]; 会自动调用drawRect 方法
3.[self setNeedsLayout]会默认调用layoutSubView 就可以处理子视图中的一些数据了
4.因为UITextView 继承自 ScrollView 系统会自动设置64 的顶部间距
5.作为UIView 没有 image 属性 和 backgroudImage 属性 只能将整张图片画到UIView 上面去
6.load 是只要类所在的文件被调用,而initialize是在类或者其子类的第一个方法被调用之前调用。相同点是:方法只会被调用一次。
7. _deal = deal;复制给本页面的属性, 在本页面别的方法里就能调用这个值
8.[self viewDidLoad]; 在view创建完毕后,最终都会调用viewDidLoad。一般我们会在这里做一些界面的初始化操作,比如往view中添加一些子视图,从数据库或者网络加载模型数据装备到子视图中。
9.当一个控件没有尺寸, 但是设置了子控件是可以显示出的,但是却不能点击交互。
10. (int)(page+0.5) 四舍五入的运算
需求: 一进来就弹出键盘
[textView becomeFirstResponder];
需求:取消第一响应者 (退出键盘)
[searchBar resignFirstResponder];
需求: 退下键盘
[self.view endEditing:YES];
需求: 换单词
com+F 比如 button 换成 MIOLeftMenuButton 之后点击all 然后点 done 搞定
需求:切换控制器
modal 出来的控制器 用dismiss 销毁
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:publish animated:NO completion:nil];
push 出来的控制器 用pop 销毁 切换是可逆的。
[self.navigationController popViewControllerAnimated:YES];
3. 切换 window 的rootViewController 新特性 【前两种都是销毁会存在内存中,window 会销毁】
需求:设置启动图片延长
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[NSThread sleepForTimeInterval:0.2];// 这一句代码延长启动时长
return YES;
}
需求:计算总页数
// 总页数 == (总个数 + 每页的最大数 - 1) / 每页最大数
NSUInteger rows = (sqaures.count + maxCols - 1) / maxCols;
需求:查看服务器返回的数据
//发送请求给服务器
//查看服务器返回的数据
MIOLog(@"%@",responseObject);
//获取帖子数据 转化成plist 文件
[responseObject writeToFile:@"/Users/linjieai2008qqcom/Desktop/tiezi.plist" atomically:YES];
需求:三种优先级
window_.windowLevel =UIWindowLevelAlert;最高 2
window_.windowLevel =UIWindowLevelStatusBar; 中等 1
window_.windowLevel =UIWindowLevelNormal; 最低 0
需求:获取应用程序窗口的根控制器
[UIApplication sharedApplication].keyWindow.rootViewController
需求:返回控制器的方向
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
需求:不需要跟随父控件的尺寸变化而伸缩
self.autoresizingMask = UIViewAutoresizingNone
需求:永远可以上拉下拽控件
self.collectionview.alwaysBounceVertical = YES;
需求:查找沙盒路径
打印NSLog(@“%@”file); 就可以找到sqlite 沙盒路径 就能查看 团购收藏的内容
需求:换单词
com+F 比如 button 换成 MIOLeftMenuButton 之后点击all 然后点 done 搞定
需求 :侧滑动画功能的实现
[UIView animateWithDuration:2.0 animations:^{
self.navigationController.view.transform = CGAffineTransformMakeTranslation(200, 0);
}];
需求:配置PCH :
1.创建pch
2.在building settings 中 设置 Apple LLVM 7.1 language
3.Precompile Prefix Header 设置为YES 下一行
Prefix Heaser 设置内容为: $(SRCROOT)/网易新闻/pchFile.pch
需求:默认第一个为选中按钮
/** 选中按钮 */
@property (nonatomic, weak) UIButton* selectedButton ;
//监听按钮点击
-(void)buttonClick:(UIButton* )button
{
self.selectedButton.selected = NO;
button.selected = YES;
self.selectedButton = button;
}
UIButton *newsButton =[self setupBtnWithIcon:@"sidebar_nav_news" title:@"新闻" bgColor:MIOColorRGBA(202, 68, 73, alpha)];
[self buttonClick:newsButton];
需求:调节状态栏字体亮度为白色
//设置状态栏字体为亮色
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
问题: 如果还无法正常现实 就是优先级不够 ,如果还不行设置plist 文件
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
状态栏的样式
- (UIStatusBarStyle)preferredStatusBarStyle;
Ø 状态栏的可见性
- (BOOL)prefersStatusBarHidden;
n 通过[UIApplication sharedApplication]可以获得这个单例对象
n
需求:子类继承父类重写时候 有返回值和没返回值的情况
1. 没有返回值
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
2.有返回值
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
需求:验证对象是否被销毁了
-(void)dealloc
{
NSLog(@“ %s ”,__func__);
}
需求:设置随机背景色
self.view.backgroundColor =[UIColor colorWithRed:arc4random_uniform(100)/100.0 green:arc4random_uniform(100)/100.0 blue:arc4random_uniform(100)/100.0 alpha:1.0];
需求:1.ios button 点击Action连接到.h 文件的 @interface 会在 @implementatopm生成方法
2. 链接到.m 文件中 @interface 中 也会在@implementation 生成方法
3. 直接链接到.m 的@implementation 会生成方法 ! 这三个有什么区别吗
解决:1..h 文件里面的成员外部可以访问(可以设置输出口)
2. 会自动生成set 和 get 方法,如果选择Action(可以设置输出口)
3. 可以生成set 和 get 方法, 不能设置输出口
需求:点语法和setter 如何区分使用?
例子: [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]
btn.contentVerticalAlignment = UIControlContentVerticalAlignment;
解决:用点语法 实际上是调用了属性的set 和 get方法
UIButton titleColor 是个方法不是属性 所以点不出来 setTitleColor 是直接调用的方法
需求://需要转换坐标系
CGRect newFrame =[from convertRect:from.bounds toView:window];
self.containerView.CenterX = CGRectGetMidX(newFrame);
self.containerView.y = CGRectGetMaxY(newFrame);
比如self.red = [0 ,50, 100 ,100] self.blue = [100,150,100,100]
理解: 以红色视图的坐标点为远点的图形 CGRectMake(50,50,50,50) 转换成以 变成self.blue 为坐标原点的坐标点 的值 (150 150 ,50, 50);
CGRect newRect =[self.red convertRect:CGRectMake(50,50,50,50) toView:self.blue];
需求:UIViewController UIView 的初始化
UIViewController 的初始化在 viewDidLoad
UIView 的自定义xib 初始化在 awakeFromNib
需求 : 账号密码 判断的时候 不会造成重复判断 直接退出 不执行后面的代码
if(username.length == 0)
{
[self showInfo:@"账号不能为空" message:@"提示" cancelMess:@"我知道了"];
return;
//return 就不会提醒后面的信息了。
}
需求 :打印屏幕的尺寸
NSLog(@“ %@ “,NSStringFromCGSize([ UIScreen mainScreen].bounds.size))
需求 : 不设置启动图片的话 屏幕会变成 4s 的尺寸
launchScreen 其实是把控制器设置了一个截屏. 生成了一个图片