美文网首页
ios 小知识笔记

ios 小知识笔记

作者: 画舫烟中浅 | 来源:发表于2019-03-05 17:42 被阅读0次

    网址:http://blog.leichunfeng.com/blog/2017/02/20/talking-about-the-decompression-of-the-image-in-ios/#jtss-tsina 图片压缩对比

    ------------------------------------UI内容 --------------------------------
    masksToBounds是CALayer的方法;clipsToBounds是UIView的方法,最终会调用masksToBounds方法。所以直接调用masksToBounds省资源一点

    当masksToBounds设置为YES时,此时如果给view设置,阴影等是没有效果的,因为被裁减了。如果给图片既要设置圆角,又要设置阴影。可以利用 Core Graphics 自己画出了一个圆角矩形。

        - (UIImage *) yh_drawRectWithRoundedCorner:(CGFloat)radius  roundRect:(CGRect)rect images:(UIImage *)image{
          UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);// 高120、宽213
          CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
           CGContextAddPath(UIGraphicsGetCurrentContext(), [UIBezierPath bezierPathWithRoundedRect:imageRect  byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(radius, radius)].CGPath);
          CGContextClip(UIGraphicsGetCurrentContext());
    
         [image drawInRect:imageRect];
         CGContextDrawPath(UIGraphicsGetCurrentContext(), kCGPathFillStroke);
         UIImage *lastImage = UIGraphicsGetImageFromCurrentImageContext();
         UIGraphicsEndImageContext();
         return lastImage;
        }
    

    ----------------------------------OC内容-----------------------------------------

    delegate修饰:weak与assign 的区别
    使用weak修饰的话:对象释放后会将其制为nil,而使用assign不会制为nil,会出现野指针,程序崩溃。

    copy和retain的区别:
    首先要分清copy是深拷贝还是浅拷贝:如果是浅拷贝,则没有区别。都是指针拷贝,只是复制了一个指针,对象的引用计数+1。但是地址相同。如果是深拷贝,则有区别。copy会拷贝一个指针,还会拷贝一个地址。使得新对象,有一个新指针和新地址。而retain:只会使新对象多一个指针。地址还是旧对象的地址。 简而言之就是:如果修饰的对象是不可变的则没有区别,如果是可变的则有区别。

    对于语句NSString*obj = [[NSData alloc] init]; ,编译时和运行时obj分别是什么类型?

    在编译时,我们所声明的obj是NSString *类型,因此是NSString类型对象。
    在运行时,由于指针obj所指向的是NSData类型对象的内存,因此实际上是NSData类型的对象。
    说明:
    在编译时,这一行代码会转换成类似这样:

    NSString *obj = ((id (*)(id, SEL))objc_msgSend)([NSData class], @selector(alloc));
    obj = ((id (*)(id, SEL))objc_msgSend)((id)obj, @selector(init));
    

    由于在编译时,转换成id,因此可以用NSString *指向NSData对象,而id是具备运行时特性的,因此在链接时,通过id的isa指针可以找到其所属的类,因此最终类型还是通过isa确定其所属类型。

    相关文章

      网友评论

          本文标题:ios 小知识笔记

          本文链接:https://www.haomeiwen.com/subject/dwscdqtx.html