iOS知识点

作者: TenMios | 来源:发表于2016-09-02 21:33 被阅读48次

    // 当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 其实是把控制器设置了一个截屏.  生成了一个图片

    相关文章

      网友评论

        本文标题:iOS知识点

        本文链接:https://www.haomeiwen.com/subject/pnlkettx.html