现在的位置: 首页 > 综合 > 正文

记录遇到的ios下的坑和bugs

2018年05月25日 ⁄ 综合 ⁄ 共 2172字 ⁄ 字号 评论关闭

开个帖子不定期更新,记录遇到的ios下的坑和bugs,其中有些已经解了,有些还是无解,有些是apple自己的改进,但是确实坑到我们了

UIWebView内存泄漏

这个到ios7下还无解,ios8未看
UIFont copy 在ios6下crash

这个想不明白为啥,也许是以前的coder用了什么黑魔法

UITextView 和 UITextField 的键盘出现的消息的顺序不一样的问题

// UIKeyboardDidShowNotification ---> UITextViewTextDidBeginEditingNotification
// UITextFieldTextDidBeginEditingNotification ---> UIKeyboardDidShowNotification

这个也不能算是bug,但是有的时候就是想先执行DidBeginEditing的消息得到引起弹出键盘的sender囧么办呢
下面的代码ios7下面(sdk7.1)superview都是UIDropShadowView,ios8下面(sdk8.0)2是nil

 [self presentViewController:vc
                       animated:NO
                     completion:^{
                         UIView *view = vc.view.superview;
                         NSLog(@"1:%@", view);
                     }];
    UIView *view = vc.view.superview;
    NSLog(@"2:%@", view);

一般用这个属性是修改呈现的view的size, 在sdk7以后可以用preferredContentSize
ios7在转屏的时候window是不会转动的,ios8转动

这就导致一些依赖UIWindows的控件就悲剧了

window.location

在 ios8 中网页里用window.location= “xxx://yyy”可以调起注册了xxx的app,但是在ios8下面,结尾带’=’的url是不能调起app的.
解决方法

var iThunderFrame;
    iThunderFrame = document.createElement("iframe");
    iThunderFrame.setAttribute("src", sDownloadURL);
    iThunderFrame.setAttribute("style", "display:none;");
    iThunderFrame.setAttribute("height", "0px");
    iThunderFrame.setAttribute("width", "0px");
    iThunderFrame.setAttribute("frameborder", "0");
    document.body.appendChild(iThunderFrame);
    iThunderFrame.parentNode.removeChild(iThunderFrame);

[str UTF8String]地址问题

同样的NSString的UTF8String地址一样么?
ios6下难讲,ios7,ios8一样.
因此下面这种写法是不可取的,

- (void)setCategoryProperty:(NSString*)key value:(id)obj
{
    [self willChangeValueForKey:key];
    objc_setAssociatedObject(self, [key UTF8String], obj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:key];
}
- (id)getCategoryProperty:(NSString*)key
{
    return objc_getAssociatedObject(self, [key UTF8String]);
}

但是我们又非要想这样写囧么办呢

// 先NSString取值,再取址.
- (void)setCategoryProperty:(NSString*)key value:(id)obj
{
    [self willChangeValueForKey:key];
    objc_setAssociatedObject(self, (__bridge const void *)(&(*key)), obj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:key];

}
- (id)getCategoryProperty:(NSString*)key
{
    return objc_getAssociatedObject(self, (__bridge const void *)(&(*key)));
}

抱歉!评论已关闭.