zoukankan      html  css  js  c++  java
  • XMPP总结1

    1. 明确目标,指定计划
    在做任何事情之前,如果目标明确,就已经成功了一半!

    2. 工程搭建
    搭建大体的系统框架
    1) 通过Images.xcassets管理应用程序中的图片资源,是支持文件夹管理和拖拽的
    2) 如果要发布应用程序,图标文件需要有8个
    3) 苹果官方不太支持使用LaunchImage
    4) 如果需要兼容iOS6.0的操作系统,不能使用Images.xcassets提供的切片功能,需要使用stretchableImageWithLeftCapWidth对图片进行拉伸处理!

    3. 关于多线程
    所有UI相关的操作,必须在主线程队列中实现!
    在程序开发过程中,千万不要满足NSLog确认流程无误后,就不再继续了!

    如果出现这种情况,可以使用 NSLog(@"%@", [NSThread currentThread]); 跟踪调试,判断更新UI的线程是否是主线程!

    4. 界面UI交互的细化
    * 什么时候,显示什么
    * 什么时候,光标出现在什么位置
    * 什么时候,可以直接打开键盘
    * 什么时候,可以直接自动登录
    * 不需要的视图控制器,连显示都不显示
    * ......
    以上种种界面交互的调整,直接关系到用户对应用程序的体验好坏!是需要长时间磨练的,但是需要我们从现在起,养成习惯,不要大体功能实现就OK!

    程序员是一个精雕细琢的工作!在不断的磨练中成长!

    5. 关于重构
    1) 不要为了重构而重构;
    2) 重构只有在需要时,才进行的,如果你的代码运行的很好,同时不需要改动,那么就不需要重构!因为重构是有风险的,很有可能一不小心,把原来正常运行的程序,改的根本运行不了!
    3) 如果需要重构,一定要一小步,一小步地进行,幅度越小,风险越小!边重构,边调试。
    4) 重构的越早,代码的基础就会越好,后续的延展性会更强!重构的越晚,重构的复杂度越高,甚至永远都无法完成重构!
    5) 真正好的重构步骤是基于单元测试驱动的!
    6) 重构的目标,让开放的东西越来越少,第三方对自己的打扰就越少,代码越可控!
    7) 自己能做的事情,自己做!
    8) 如果其他“人”能做的事情,就全权交给对方完成。
    9) 通过重构,可以让代码之间解耦,从而系统的扩展性更强!

    ----------------------------------------------------------------------------------------------------------------------------------------

    1. 电子名片(vCard)

    首先要打开扩展模块的头文件
    #import "XMPPvCardTempModule.h"
    #import "XMPPvCardCoreDataStorage.h"

    // 获取当前账号的电子名片
    XMPPvCardTemp *myCard = [[[self appDelegate] xmppvCardModule] myvCardTemp];

    。。。。。。
    设置属性
    -
    或者
    -
    更新界面UI
    。。。。。。

    // 更新或保存电子名片
    [[[self appDelegate] xmppvCardModule] updateMyvCardTemp:myCard];

    电子名片的属性可以参照XMPPvCardTemp.h文件中的声明

    提示:如果是NSArray类型的属性,最好进.m文件查看对应的getter&setter方法,确认是否真的实现。

    补充:在界面设计上要给用户最大的操作空间,不要把用户限制的过死!


    2. 花名册(好友列表)使用XMPP好友列表是可以在服务器上直接设置的,这一特性,非常符合企业级应用的需求

    首先要打开扩展模块的头文件
    #import "XMPPRoster.h"
    #import "XMPPRosterCoreDataStorage.h"

    注意:
    2.1 XMPPRoster需要添加代理,以自动更新好友信息
    _xmppRoster addDelegate
    之所以有这个区别,是因为电子名片的修改是用户自发的,而好友信息的修改是其他用户完成的。

    2.2 使用花名册的数据是通过NSFetchedResultsController实现数据管理的

    具体的使用步骤如下:

    1) 获取管理数据上下文
    NSManagedObjectContext *context = [[[self appDelegate] xmppRosterStorage] mainThreadManagedObjectContext];

    2) 实例化查询请求
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];

    3)指定排序描述
    NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];

    4)实例化NSFetchedResultsController

    5)执行查询
    [_fetchedResultsController performFetch:&error]

    6) 设置表格单元格
    XMPPUserCoreDataStorageObject *user = [_fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = user.displayName;

    ----------------------------------------------------------------------------------------------------------------------------------------

    1. 添加好友,XMPP好友机制是一种订阅机制,Subscription
    如果要实现快速建议的双向订阅,可以设置XMPPRoster的
    autoAcceptKnownPresenceSubscriptionRequests = YES
    1) 从客户端内部添加
    subscribePresenceToUser:jid
    2) 其他客户端发送订阅请求
    在XMPPStream的didReceivePresence代理方法中,判断展现类型,如果是订阅,则接受即可
    acceptPresenceSubscriptionRequestFrom
    2. 删除好友
    removeUser:user.jid

    3. 在线状态
    XMPPUserCoreDataStorageObject中的sectionNum
    “0”- 在线
    “1”- 离开
    “2”- 离线、下线

    无论是何种用户状态,都会自动更新XMPPUser...表,APP界面上因为表格已经与NSFetchedResultsController进行绑定,因而无需做任何处理,界面即会自动更新

    4. 在XMPP框架中,为了提升用户头像的使用效率,专门引入了XMPPvCardAvatarModule扩展单独处理用户头像

    5. 为了提升XMPP应用程序的性能,在APP中可以针对真机开启后台网络访问,以及实体能力扩展
    5.1 后台网络访问
    // 让XMPP在真机运行时支持后台,在模拟器上是不支持后台服务运行的
    #if !TARGET_IPHONE_SIMULATOR
    {
    // 允许XMPPStream在真机运行时,支持后台网络通讯!
    [_xmppStream setEnableBackgroundingOnSocket:YES];
    }
    #endif

    5.2 实力能力只需要注册并激活实体能力的扩展即可
    _xmppCapabilitiesCoreDataStorage = [[XMPPCapabilitiesCoreDataStorage alloc] init];
    _xmppCapabilities = [[XMPPCapabilities alloc] initWithCapabilitiesStorage:_xmppCapabilitiesCoreDataStorage];

  • 相关阅读:
    leetcode 912. 排序数组
    leetcode 633. 平方数之和
    leetcode 1512. 好数对的数目
    leetcode 1822. 数组元素积的符号
    leetcode 145. 二叉树的后序遍历
    leetcode 11. 盛最多水的容器
    leetcode 28 实现strStr()
    leetcode 27. 移除元素
    leetcode 26. 删除有序数组中的重复项
    产品化思维之公式系统
  • 原文地址:https://www.cnblogs.com/changxs/p/3468269.html
Copyright © 2011-2022 走看看