3
- (int)getMsgLen:(NSString *)msg{
    int unicode = 0;//is arabic or english (1=arabic 0=english)
    NSString *str = @"دجحخهعغفقثصضطكمنتالبيسشظزوةىلارؤءئإلإألأآلآ،؛؟ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيـًٌٍَُِّْ";

    for (int i = 0; i<[str length]; i++) {
        NSString *strResult = [str substringWithRange:NSMakeRange(i, 1)];

        for (int r = 0; r<[msg length] ;r++) {
            NSString *msgResult = [msg substringWithRange:NSMakeRange(r, 1)];
            if([strResult isEqualToString:msgResult] && strResult)
                unicode = 1;
        }
    }

    int msgLenght = 1;

    // arabic value

    float oneMsgLenth = 70;
    float twoMsgLenth = 67;

    //  english value
    if(unicode == 0){
        oneMsgLenth = 160;
        twoMsgLenth = 134;
    }

    int numChar = [msg length];
    if( numChar > oneMsgLenth){
        msgLenght = ceil(numChar / twoMsgLenth);
    }
    return msgLenght;
}

私はこのコードを持っています。このコードは、メッセージの計算数を変更するアラビア文字があるかどうかを確認します。このコードは、UITextView に書き込むたびに機能し、正常に機能していますが、クリックするたびにUI ラベル。

それを非常に速くするのに役立つアドバイスはありますか?

4

1 に答える 1

3

すぐに終了することで、少なくともループの速度を上げることができます。また、一度だけ初期化されるクラスをunicode != 0使用して比較を行うこともできます。NSCharacterSet

MyClass.h にインスタンス変数を追加します。

@interace MyClass : NSObject
{
    NSCharacterSet *_arabicChars;
}

...

@end

MyClass.m:

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        _arabicChars = [NSCharacterSet characterSetWithCharactersInString:@"دجحخهعغفقثصضطكمنتالبيسشظزوةىلارؤءئإلإألأآلآ،؛؟ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيـًٌٍَُِّْ"];
        ...
    }
    return self;
}

- (int)getMsgLen:(NSString *)msg{

    BOOL isArabic = [msg rangeOfCharacterFromSet:_arabicChars].location != NSNotFound;

    int msgLenght = 1;

    // arabic value

    float oneMsgLenth = 70;
    float twoMsgLenth = 67;

    //  english value
    if (!isArabic){
        oneMsgLenth = 160;
        twoMsgLenth = 134;
    }

    int numChar = [msg length];
    if( numChar > oneMsgLenth){
        msgLenght = ceil(numChar / twoMsgLenth);
    }
    return msgLenght;
}
于 2013-05-22T09:11:53.380 に答える