zoukankan      html  css  js  c++  java
  • iOS开发的一些基础知识

    关于String:
    1,把一个整数,转换成一个NSString

    [NSString stringWithFormat:@"%d",3];

    2,比较两个NSString是否相等

    [@"test" isEqualToString:@"test"];

    3,@”abcdefg”,截取第两个字符开始的三个字符

    [@"abcdefg" substringWithRange:NSMakeRange(1, 3)]

    4,讲解UTF8与Unicode的区别与关系
    这里有详细讲解
    5,NSString , NSMutableString的区别
    NSString, 不可修改字串
    NSMutableString,可修改字串
    6,计算一个字串在指定宽度,指定字体情况下,需要渲染的实际像素高度

    [@"abcdefg" sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(100, INT32_MAX)].height

    7,用HTTP协议,获取www.baidu.com网站的HTML数据

    [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"]];

    UIView与UIViewController:
    1,说明UIView中 frame与bounds的区别
    frame: UIView实例的位置与大小信息
    bounds: UIView实例的显示内部内容的位置与大小信息
    2,简单讲解UITableView的UITableViewDataSource与UITableViewDelegate的作用
    这两个都是UITableView所需要的协议:
    UITableViewDataSource,用户定义此tableView的数据获取方法,用来提供数据源
    UITableViewDelegate,用来定义显示样式与用户事件相关方法
    3,实现一个带背景UIView的透明渐变动画效果,与移动动画效果
    //动画配制开始

    [UIView beginAnimations:@"animation" context:nil];
    [UIView setAnimationDuration:.5];
    //图片上升动画
    CGRect f = imgView.frame ;
    f.origin.y = 30;
    imgView.frame = f;
    //半透明度渐变动画
    imgView.alpha = 0;
    //提交动画
    [UIView commitAnimations];

    4,使一个UIImageView的图片视图对象,随着改变它的frame而自适应做拉伸。

    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];
    imgView.frame = CGRectMake(0, 0, 200, 200);
    imgView.contentMode = UIViewContentModeScaleToFill;

    5,使一个UIView对象,在屏幕旋屏后,保持居上位置不变,居左位置自适应,大小不变

    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];
    imgView.frame = CGRectMake(20,20, 100, 100);
    imgView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;

    6,UIView中所使用的设计模式,越多越好~
    7,用UIView的layer中的某个属性,实现一个圆角视图(需要引入Quartz2D库)

    self.view.layer.cornerRadius = 5;
    self.view.clipsToBounds = YES;

    8,UIScrollView中contentSize的作用
    用来标识当前内容显示的位置,类型是CGSize
    9,UIViewController与View的关系,在MVC模式中的角色
    一个是Controller层,一个是View层,Controller控制View的显示。
    10,列举几种系统ViewController
    UITabBarController
    UINavigationController
    UITableViewController
    UIImagePickerController
    11,UIView中方法drawRect与layoutSubviews的区别,
    当调用view的setNeedsDisplay时,系统异步调用drawRect方法,并配制图形的上下文供在此方法内使用Quartz2D API。
    当调用view的setNeedsLayout时,系统异步调用layoutSubviews方法,但不配制图形上下文,只做页面布局使用
    12,UIView中的clipsToBounds属性的作用
    子视图的大小超过父视图时,如果此属值为YES,则把多余的部分隐藏,反之依然。
    13,如果UIView中的一个子View的位置在此UIView之外,是否还可以获取此UIView的touchesBegan等方法
    获取不到
    14,如何判断用户双击操作
    在touchesBegan方法中,获取UITouch实例:

    [ [ touches anyObject ] tapCount];

    15,在UIView的drawRect方法内,用Quartz2D API绘制一个像素宽的水平直线

    -(void)drawRect:(CGRect)rect{
     
    	//获取图形上下文
        CGContextRef context = UIGraphicsGetCurrentContext();
     
    	//设置图形上下文的路径绘制颜色
    	CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
     
    	//取消防锯齿
    	CGContextSetAllowsAntialiasing(context, NO);
     
    	//添加线
    	CGContextMoveToPoint(context, 50, 50);
    	CGContextAddLineToPoint(context, 100, 50);
     
    	//绘制
    	CGContextDrawPath(context, kCGPathStroke);
     
    }

    16,用UIWebView加载: www.baidu.com

    UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    [web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
    [self.view addSubview:web];
    [web release];

    17,子线程是否也可以修改UIView
    不能,只有主线程有直接修改UI的能力。
    内存相关:
    1,retain是作什么用的,在内存管理中起到什么作用,与之对应的释放方法是什么
    使实例的引用计数(retainCount)加一,与之对应的释放方法有:release, autorelese。
    2,

    NSObject *o = [ [ NSObject new ] autorelease ];

    此句执行完后,此对象”o”的retainCount是多少
    为1
    3,讲解NSAutoreleasePool在Objective-C中内存管理的作用
    内存管理池, 使Objective-C上升为半自动化的内存管理语言.
    4,简单讲解@property中的声明,assign 与 retain的区别,并实现一个retain声明属性的setter方法
    这两个都为对setter方法的声明,只能其一。
    assign, 标明setter方法仅以指针赋值的方式实现
    retain,setter方法,必须实现retain操作。

    -(void)setName:(NSString*)_name{
        if(name != _name){
           [name release];
           name = [_name retain];
        }
    }

    5,

    NSArray *arr = [ NSArray array ];

    此arr对象需不需要release,为什么
    不需要,因为没有retain, alloc, new, copy等方法。
    此为cocoa约定俗成的创建对象的便捷方法,此实例的一个retainCount已经被放入autoreleasePool中。
    runtime与cocoa架构:
    1,id,在Objective-C中表示什么,起什么作用
    可以指向任何实例的类型,它为一个仅含有一个Class类型的isa成员指针的结构体。

    typedef struct objc_class *Class;
    typedef struct objc_object {
        Class isa;
    } *id;
     
    struct objc_class {
        Class isa;
     
    #if !__OBJC2__
        Class super_class                                        OBJC2_UNAVAILABLE;
        const char *name                                         OBJC2_UNAVAILABLE;
        long version                                             OBJC2_UNAVAILABLE;
        long info                                                OBJC2_UNAVAILABLE;
        long instance_size                                       OBJC2_UNAVAILABLE;
        struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
        struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
        struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
        struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
    #endif
     
    } OBJC2_UNAVAILABLE;

    2,NSArray, NSMutableArray, NSDictionary, NSMutableDictionary, NSSet, 的作用
    这些是cocoa架构中常用容器,用来存放不同目的的实例。
    NSArray,为存储一系列有序实例,一旦创建不可添加修改列表。
    NSMutableArray,用于创建可变对象列表的有序实例。
    NSDictionary,存放键值对的数据,形如Hash。
    NSSet,存放无序数据。
    3,NSNumber, NSValue的用法
    NSNumber,用于存放数值信息相关类,此实例可直接存放在cocoa容器中。
    NSValue,用于存储数据结构体。
    4,NSObject 的结构定义中的isa是什么
    是Class类型的一个数据结构体,

    struct objc_class {
        Class isa;
     
    #if !__OBJC2__
        Class super_class                                        OBJC2_UNAVAILABLE;
        const char *name                                         OBJC2_UNAVAILABLE;
        long version                                             OBJC2_UNAVAILABLE;
        long info                                                OBJC2_UNAVAILABLE;
        long instance_size                                       OBJC2_UNAVAILABLE;
        struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
        struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
        struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
        struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
    #endif
     
    } OBJC2_UNAVAILABLE;

    5,Objective-C语言的动态性的特性与实现(Runtime)

    http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html

    6,怎样判断一个对象是否是一个类的实例

    [ testView isKindOfClass:[ UIView class ] ];

    7,怎么判断一个对象是否含有指定方法

    [testView respondsToSelector:@selector(methodName)];

    8,用NSTimer做一个定时器,每隔一秒打印: hello world

    -(void)printHello{
     
    	NSLog(@"hello world!!");
    }
     
    -(IBAction)clickBtn:(id)sender{
     
    	NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1
    				  target:self
    				selector:@selector(printHello)
    				userInfo:nil
    				 repeats:YES];
    	[timer fire];
     
    }

    9,用NSObject 的 performSelectorInBackground 创建子线程,并在子线程完成一次HTTP请求,把请求结果显示在屏幕上
    Archive.zip
    10,NSNotificenter的作用,说明怎样实现Observer模式
    消息分发与注册中心。用来管理在在消息中心中注册监听的对象,并在发生事件时,把消息分发送给监听此事件的监听者。
    此为典型的Observer模式的实现。在我们的应用中,为了解偶模块之间的偶合度,会大量使用消息中心,以事件与消息去驱动模块与模块之间的协作。
    11,简要说明NSRunloop

    http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1

  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/greywolf/p/2670204.html
Copyright © 2011-2022 走看看