iOS XMPP房间的创建注意事项及误区

本文详细介绍了在iOS中使用XMPP框架创建聊天室时的注意事项,包括如何设置XMPPRoom的参数,如数据库存储、Room JID的选择和队列选择。强调了避免在主线程中进行操作以防止性能问题,并提供了自定义RoomClass的示例代码,以更好地管理和控制聊天室。此外,还提到了房间配置和代理方法的实现,以及离开房间的正确方式。
摘要由CSDN通过智能技术生成
想必大家都是用这个方法来分配一个Room对象:

_m_xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:_xmppRoomDatajid:RoomJID dispatchQueue:queue2 ];

那我这里就详细介绍一下各个参数该如何设置.


第一个参数,是XMPPRoomCoreDataStorage类型,他是为这个房间分配一个coredata的数据库,但由于我是用自己的数据库,所以就用

_xmppRoomData = [[XMPPRoomCoreDataStoragealloc] initWithInMemoryStore];

来实例化之。



第二个参数则是Room的JID这个需要自己分配,不能跟服务器已经有的JID重复。



第三个参数则是房间所在队列,此参数特别重要,请大家一定注意。xmpp的提供了一个IOS 的demo,此demo很大程度上误导了大家,因为他初始化queue都用的是

dispatch_get_main_queue()

这是主线程队列(没错就是管UI更新的那个),他可能是为了图写domo方便所以才用这个队列。但是实际的聊天软件,你敢在写主线程队列里面?一个也许还行,20个房间呢?程序根本就卡到爆。所以我建议大家重新新建一个串行队列

e.g :

queue2 =dispatch_queue_create("com.我的工程.RoomQueue",NULL); // 串行queue

你也许想问,为什么一定要用串行?并行为什么不行?因为,stream也是串行的,也是一条一条往服务器送。



注意事项:最好自己抽象一个RoomClass,一个聊天室就是一个RoomClass对象,这样可以方便管控房间消息加入离开房间等。下面贴上我自己的RoomClass和初始化RoomClass方法:

RoomClass.h

//

//  RoomClass.h

//  MICI13

//

//  Created by   on 14-6-17.

//  Copyright (c) 2014 DoubleKill. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "XMPPFramework.h"

#import "XMPPRoom.h"

#import "CoreDataManager.h"

//#import "CentreControl.h"

#import "TFTimer.h"

@interface RoomClass :NSObject<XMPPRoomDelegate>{

    

   NSTimer *RoomTimer;

   XMPPStream  *stream;


    

    

}

//#define kNofSingleMessage               @"kNofSingleMessage"

//#define kNofRoomMessage                 @"kNofRoomMessage"

//#define kNofRoomDidJion                 @"kNofRoomDidJion"

//#define kNofRoomReceiveInvitation       @"kNofRoomReceiveInvitation"

typedefvoid(^handler)(BOOL result,id obj) ;

@property (nonatomic,copy)handler RoomBlock;//

@property (nonatomic,strong) XMPPRoomCoreDataStorage *xmppRoomData;

@property (nonatomic,strong) XMPPRoom *m_xmppRoom;

@property (nonatomic,copy) NSString *Jid;

@property (nonatomic,assign) BOOL    isCame;

@property (nonatomic,assign) BOOL    isLoadHistory;

- (id)initWithJid:(NSString *)jid members:(NSMutableArray *)members stream:(XMPPStream*)xmppstream Finish:(handler)finished;

-(void)leaveRoom;

@end


RoomClass.m

//

//  RoomClass.m

//  MICI13

//

//  Created by   on 14-6-17.

//  Copyright (c) 2014 DoubleKill. All rights reserved.

//


#import "RoomClass.h"


@implementation RoomClass{

   XMPPStream * m_stream;

   NSMutableArray * members;

   NSString *Roomjid;

   NSDate *dateIn;

}

extern dispatch_queue_t queue2;

//

//NSString *const kXMPPmyJID = @"kXMPPmyJID";

//NSString *const kXMPPmyPassword = @"kXMPPmyPassword";

- (id)initWithJid:(NSString *)RoomJID members:(NSMutableArray *)member stream:(XMPPStream*)xmppstream Finish:(handler)finished

{

   _RoomBlock = finished;

   m_stream = xmppstream;

   Roomjid = RoomJID;

   members = member;

    

   self = [superinit];

   if (self) {

        // Custom initialization


        _xmppRoomData = [[XMPPRoomCoreDataStoragealloc]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值