当前位置:  编程技术>移动开发
本页文章导读:
    ▪Xcode开发技艺之code snippets(代码片段)        Xcode开发技巧之code snippets(代码片段) Xcode开发技巧之code snippets(代码片段) 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/12163939 转载请注明出处 一、什么是代码片段 当在Xcode.........
    ▪ Core Data多线程环境下pendingChange引发的排序不对有关问题        Core Data多线程环境下pendingChange引发的排序不对问题这是一个起初看起来很神奇的问题,大意如下: 有一个Table,展示多个消息会话,这些消息会话按最新消息时间排序;某种情况下,新收.........
    ▪ 使用nfs实现计算机和ARM的共享       使用nfs实现电脑和ARM的共享1、安装NFS sudo apt-get install nfs-kernel-server 2、在电脑上创建文件夹作为共享文件夹 sudo mkdir /home/nfs sudo chmod 777 /home/nfs 3、修改/etc/exports的内容 sudo gedit /etc/exports 将/e.........

[1]Xcode开发技艺之code snippets(代码片段)
    来源: 互联网  发布时间: 2014-02-18
Xcode开发技巧之code snippets(代码片段)
Xcode开发技巧之code snippets(代码片段)
作者:wangzz
原文地址:http://blog.csdn.net/wzzvictory/article/details/12163939
转载请注明出处

一、什么是代码片段
当在Xcode中输入dowhile并回车后,Xcode会出现下图所示的提示代码:

这就是代码片段,目的是使程序员以最快的速度输入常用的代码片段,提高编程效率。该功能是从Xcode4开始引入的。在Xcode中的位置如下图所示:

里面有很多Xcode自带的代码片段,上例中的dowhile就是其中的一个。

二、如何自定义代码片段
由于项目、所用语言或者编码习惯的差别,不同的程序员习惯用的代码片段也不尽相同,这就有了自定义代码片段的需求,好在Xcode是支持该功能的。
@property属性的定义是Cocoa程序开发中很常用的一个功能,下面就以此为例说明如何自定义代码片段。
1、书写代码片段
在声明@property属性的地方写下如下语句:
@property (nonatomic, retain) <#type#> <#name#>;
这里<#type#>和<#name#>起什么作用可以在后面的使用效果中看出来。
2、新建代码片段
选中上述语句,用鼠标左键拖到上图中指示的代码片段在Xcode中的区域里,就新建了一个代码片段
3、编辑代码片段
经过第2步操作,松开鼠标左键的同时,会弹出代码片段编辑窗口,如下图所示:

图中从上到下的含义依次是:
①Title
代码片段的标题
②Summary
代码片段的描述文字
③Platform
可以使用代码片段的平台,有IOS/OS X/All三个选项
④Language
可以在哪些语言中使用该代码片段
⑤Completion Shortcut
代码片段的快捷方式,比如本文开头用到的dowhile,在这里,把属性设置的快捷方式设为property
⑥Completion Scopes
可以在哪些文件中使用当前代码片段,比如全部位置,头文件中等,当然可以添加多个支持的位置。
最后的一个大得空白区域是对代码片段的效果预览。
一切设置完成以后,点击该菜单右下角的Done按钮,新建工作就结束了。

三、代码片段的使用
有两种方式使用我们自定义的代码片段,还是以刚定义的@property属性代码片段为例:
1、在适当的位置(因为定义代码片段的时候可以设置使用平台,使用语言,使用文件等限制条件),输入property
2、直接在代码片段部分找到我们刚定义的那个,用鼠标左键拖动该代码片段到合适的位置
使用上面的两种方法中的任何一个以后,可以看到下图所示的效果:

这里,大家注意到在定义代码片段时书写的<#type#>和<#name#>所起到的作用了吧!

四、代码片段的备份
Xcode中的代码片段默认放在下面的目录中:
~/Library/Developer/Xcode/UserData/CodeSnippets 
我们可以将目录中的代码片段备份,也可以将其直接拷出来放在不同的电脑上使用,因此多台电脑之间的协作也毫无压力。



    
[2] Core Data多线程环境下pendingChange引发的排序不对有关问题
    来源: 互联网  发布时间: 2014-02-18
Core Data多线程环境下pendingChange引发的排序不对问题

这是一个起初看起来很神奇的问题,大意如下:

  • 有一个Table,展示多个消息会话,这些消息会话按最新消息时间排序;
  • 某种情况下,新收到一条消息,时间展示为最新,但这条消息没有排在最上方。

因为界面上展示的时间是最新的,所以刚开始遇到这个问题的第一反应是看看数据库里面的时间戳是不是正确的,查看后确认时间是最新的没错。

一时陷入了僵局,因为问题很难重现。

所以梳理了下逻辑:

  • 收到新消息,在后台进行处理,执行save动作;
  • Core Data保存后发出消息通知变更,主线程使用NSFetchedResultsController和UITableView绑定,收到消息后刷新界面;
  • UI界面根据dataSource进行展现,而dataSource根据latestTime进行排序;
  • 因为无法重现,所以先加上了日志输出信息,观察出了发生该现象的时候,主线程都收到两次刷新通知,正常情况下没有。

    主线程为什么会发生两次刷新通知呢?

    • 主线程内存上发生了变动;
    • 其它线程对持久化层做了写动作,通知到主线程。

    所以我就在想主线程在内存上发生了什么变动,找了很久但是没找到什么东西。后来同事一语道破天机,打印出changeValues:

    - (void)controller:(NSFetchedResultsController *)controller
       didChangeObject:(id)anObject
           atIndexPath:(NSIndexPath *)indexPath
         forChangeType:(NSFetchedResultsChangeType)type
          newIndexPath:(NSIndexPath *)newIndexPath
    {
        NSLog(@"didChangeObject %@ from %@ to %@ with %d type, \n change value : %@\n", anObject, indexPath, newIndexPath, type, [anObject changedValues]);
    }

    通过这样的日志信息可以发现主线程在内存中发生了什么变化。

    为了验证问题是不是这样引发的,我在一个Demo上进行了模拟和验证(这个Demo是之前一篇博文使用的):

    我通过在主线程修改Core Data对象的值(不一定要sortKey),但不保存:

        Player *playerObject = [self.fetchedResultsController.fetchedObjects objectAtIndex:i];
        playerObject.name = [NSString stringWithFormat:@"name-%d", arc4random() % 10000];

    接着在其它线程修改sortKey,引发主线程进行刷新:

    - (void)changeSortKeyInOtherContext:(NSManagedObjectID *)objectId
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSManagedObjectContext *tmpContext = [[NSManagedObjectContext alloc] init];
            
            NSPersistentStoreCoordinator *sharedPersistentStoreCoordinator = self.cdViewController.persistentStoreCoordinator;
            [tmpContext setPersistentStoreCoordinator:sharedPersistentStoreCoordinator];
            
            Player *playerObject = (Player *)[tmpContext objectWithID:objectId];
            
            int age = arc4random() % 100;
            playerObject.age = @(age);
            
            int salary = arc4random() % 10000000;
            playerObject.salary = @(salary);
            
            NSError *error = NULL;
            if (tmpContext && [tmpContext hasChanges] && ![tmpContext save:&error]) {
                NSLog(@"Error %@, %@", error, [error localizedDescription]);
                abort();
            }
            
            [tmpContext release], tmpContext = nil;
        });
    }

    这样就可以模拟出问题场景,进而得到验证。

    —— Jason Lee @ Hangzhou



        
    [3] 使用nfs实现计算机和ARM的共享
        来源: 互联网  发布时间: 2014-02-18
    使用nfs实现电脑和ARM的共享

    1、安装NFS

    sudo apt-get install nfs-kernel-server

    2、在电脑上创建文件夹作为共享文件夹

    sudo mkdir /home/nfs

    sudo chmod 777 /home/nfs

    3、修改/etc/exports的内容

    sudo gedit /etc/exports


    将/etc/exports的内容改为:/home/nfs *(sync,rw)

    4、重启NFS。

    sudo /etc/init.d/nfs-kernel-server restart

    5、将电脑与开发板的IP地址设为同一网段,即前三位相同。

    ifconfig eth0 192.168.0.XXX

    6、重启网络。

    sudo /etc/init.d/networking restart

    7、在ARM板上挂载。

    mount -t nfs :/home/nfs /home/root/nfs -o addr=192.168.0.XXX

    上句中:/home/root/nfs为开发板中的挂载目录,addr=XXX为电脑的IP地址




        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3