zoukankan      html  css  js  c++  java
  • IOS开发工程师的近期面试题

      1. 怎么修改只读(readonly)属性变量
        使用KVC可以修改 kvc就是键值编码(key-value),可以通过指定的key获得想要的值value,而不是通过调用 Setter,Getter 方法访问

      2.KVO 除了能观察属性外,能不能观察对象
        不能观察对象

        KVO,即 Key-Value Observing, 它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察者的对象的属性被修改后,KVO就会自动通知相应的观察者了

        KVO是一个对象能过观察另外一个对象的属性的值,并且能够发现值的变化。这是一个对象与另一个对象保持同步的一种方法,即当另一种对象的状态发生改变时,观察对象马上做出反应。它只能用来对属性做出反应,而不会用来对方法或者动作做出反应。

        实现原理:当为某个对象属性注册监听的时候,该对象的 isa 指针就会指向一个中间类,而不是本来对象真实的类。所以说,对象的 isa 指针可以改变,我们的程序最好不要依赖 isa 指针。

        简言而之就是:

        1.当一个 object 有观察者时没动态创建这个 object 的类的子类

        2.对于每一个被观察的 property, 重写其 set 方法

        3.在重写的 set 方法中调用- willChangeValueForKey:和- didChangeValueForKey:通知观察者

        4.当一个 property 没有观察者时,删除重写方法

        5.当一个 boserver 观察任何一个 property 时,删除动态创建的子类

      3.block里面能不能修改静态变量

        能 __block 可以  ---> 为什么要用__block

        你可以指定引入一个变量为可更改的,即读-写的,通过应用__block存储类型修改修饰符。

        局部变量的__block的存储和register,auto,static等存储类型相似,但它们之间不兼容。

        __block 变量保存在变量共享的作用域范围内,所有的 blocks 和 block 副本都声明或创建在和变量的作用于相同范围内。所以,如果任何 blocks 副本声明在栈内并未超出栈的结束时,该存储会让栈帧免于被破坏(比如封装为以后执行)。同一作用域范围内给定的多个 block 可以同时使用一个共享变量作为一种优化, block 存储在栈上面,就像blocks本身一样。如果使用 Block_copy 拷贝了 block 得一个副本(或者在 objective-C里面给 block 发送了一条 copy 消息),变量会被拷贝到堆上面。所以一个__ block 变量的地址可以随时间推移而更改。

        使用 __block的变量有两个限制:

          1.它们不能是可变长的数组

          2.它们不能是包含有 C99可变疮毒的数组变量的数据结构

      4. 声明一个block

        声明 block

        int (^myblock) (int)

        说明:第一个 int 是 block 的返回值  myBlock 是 block 变量  第二个 int 是参数

    在.h文件中 
    typedef void(^MyBlock)(int value); 
    @property (nonatomic,weak) MyBlock block;
     -(void)setMyBlock:(void(^)(int value)) block;
        
    在.m文件中 
    -(void)setMyBlock:(void(^)(int value)) block { 
        if (block) {
        self.block=block;
        }
    }

      5. 用coredata的时候,如果用户更新个人信息了,怎么用代码来更新页面上显示的个人信息

        1.当用户更新了自己的用户信息,保存更新数据到数据库

        2.当用户返回更新页面时先查询数据库中的内容,显示到页面上就可以了。

        查询数据库代码:

        

    //创建请求
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    // 创建实体描述
    NSEntityDescription *entity = [NSEntityDescription entityForName:ENTITY_NAME
    
    inManagedObjectContext:content];
    [request setEntity:entity];
    [request setReturnsObjectsAsFaults:NO];
    //设置谓词
    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"self = %@", data]; [request setPredicate:predicate];
    //执行请求
    NSArray *dataArray = [content executeFetchRequest:request error:nil];
    //修改信息  
    if ([dataArray count] > 0) {
    
    TaskTypeEntity *taskTypeEntity = [dataArray objectAtIndex:0]; taskTypeEntity.color = data.color;
    taskTypeEntity.status = data.status;
    taskTypeEntity.image = data.image;
    
    taskTypeEntity.name = data.name; BOOL result = [content save:nil];
    if (result) {
    
        NSLog(@“ "); 
       
         }else{
    
            NSLog(@" ");
         }
    
    }

       保存数据成功之后,在个人信息显示页面重复上述步骤查询之后直接更新数据                          

    page3image5880
  • 相关阅读:
    CSU 1333 Funny Car Racing
    FZU 2195 检查站点
    FZU 2193 So Hard
    ZOJ 1655 FZU 1125 Transport Goods
    zoj 2750 Idiomatic Phrases Game
    hdu 1874 畅通工程续
    hdu 2489 Minimal Ratio Tree
    hdu 3398 String
    洛谷 P2158 [SDOI2008]仪仗队 解题报告
    POJ 1958 Strange Towers of Hanoi 解题报告
  • 原文地址:https://www.cnblogs.com/yxfBlogs/p/4965176.html
Copyright © 2011-2022 走看看