美文网首页
社交分享、内存分析、皮肤

社交分享、内存分析、皮肤

作者: 闲得一B | 来源:发表于2016-04-23 13:52 被阅读45次

第三方框架社交分享:友盟

注册应用,获取AppKey
加入SDK,导入框架
导入头文件,设置AppKey
根据需求弹出分享界面


苹果自带

模拟器可直接用:
导入库Social
步骤:
1、判断平台是否可用
2、创建分享的控制器
3、弹出分享控制器

   // 1.判断平台是否可用
    if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) {
        NSLog(@"平台不可用,或者没有配置相关的帐号");
        return;
    }
>
    // 2.创建分享的控制器
    SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
  >  
    // 2.1.添加分享的文字
    [composeVc setInitialText:@"分享文字"];
    >
    // 2.2.添加一个图片
    [composeVc addImage:[UIImage imageNamed:@"tupian"]];
    >
    // 2.3.添加一个分享的链接
    [composeVc addURL:[NSURL URLWithString:@"httwww.baidu.com"]];
    >
    // 3.弹出分享控制器
    [self presentViewController:composeVc animated:YES completion:nil];
    >
    // 4.监听用户点击了取消还是发送
    composeVc.completionHandler = ^(SLComposeViewControllerResult result) {
        if (result == SLComposeViewControllerResultCancelled) {
            NSLog(@"取消");
        } else {
            NSLog(@"发送");
        }
    };

社交分享要注意

当用户没有下载某个应用程序的时候,不能显示分享到这个应用程序,可以选择隐藏。不隐藏苹果不准上架:涉嫌强制诱导用户下载。
比如友盟:内部就有说明。
友盟提供了多种分享控制器界面。
友盟中:新浪、人人、Email、豆瓣直接集成
QQ和微信、微信好友、微信朋友圈等需要专门集成。


内存分析

方式一:静态内存分析:适用于MRC和ARC下需要手动管理内存的代码(如:Core Foundation)
静态内存分析是不运行程序,直接对代码进行分析。
所以静态内存分析是没有分配内存的,是根据上下文的语法结构来进行的分析,看是否有内存泄露。
缺点:不准确。
方式二:


动态内存分析

工具:Allocations检查内存分配。
当图片放到Images.xcassets中,
通过[UIImage imageNamed:@"1"];来加载时,相对来说内存或增加得多些。
放到文件Images.xcassets外部,通过
[UIImage imageWithContentsofFile:[[NSBundle mainBundle] pathForResource:@"1.png"]]]时内存相对增加得少些。


ImageName、ImageWithContentOfFile
ImageName:

1.如果是图片较小,并且使用频繁的图片,可以使用ImageName:来加载图片(比如按钮图标/主页展示图片)
2.图片不会重复加载(相同的图片不会被重复加载)
3.图片加载到内存当中,会占据较大的内存空间

ImageWithContentOfFile:

1.如果是图片较大,并且使用频率很低的图片,可以使用ImageWithContentOfFile:来加载图片(比如版本新特性/相册)
2.图片加载到内存当中,占据较小的内存空间
3.相同的图片,会重复添加到内存当中
4.当对象销毁时,图片占据的内存空间一起会被释放掉.(我们可以控制对象的销毁,来释放图片占用的内存)


Core Foundation
Core Foundation是一组C语言的接口
包括:
群体数据类型 (数组、集合等)
程序包
字符串管理
日期和时间管理
原始数据块管理
偏好管理
URL及数据流操作
线程和RunLoop
端口和soket通讯

如果将Foundation对象和Core Foundation类型掺杂使用
      利用两个框架之间的 “toll-free bridging”,Toll-free bridging可以在某个框架的方法或函数同时
   使用Core Foundatio和Foundation 框架中的某些类型。
     ARC仅管理Objective-C指针(retain、release、autorelease),不管理CoreFoundation指针,
   CF指针由人工管理,手动的CFRetain和CFRelease来管理,CF中没有autorelease。
      CocoaFoundation指针与CoreFoundation指针转换,需要考虑的是所指向对象所有权的归属。
   ARC提供了3个修饰符来管理。
  1. __bridge,什么也不做,仅仅是转换。此种情况下:
      I: 从Cocoa转换到Core,需要人工CFRetain,否则,Cocoa指针释放后, 传出去的指针则无效。
      II: 从Core转换到Cocoa,需要人工CFRelease,否则,Cocoa指针释放后,对象引用计数仍为1,不会被销毁。
  2. __bridge_retained,转换后自动调用CFRetain,即帮助自动解决上述的I情形。
  2. __bridge_transfer,转换后自动调用CFRelease,即帮助自动解决上述的II情形。

夜间模式、换皮肤

换图片,换字体颜色
方法一:通过定义专门的宏和常量文件来设置。
方法二:将颜色RGB以字符串的方式放plist里面。可以为UIColor添加一个分类。
方法三:通过提供不同图片名字,从沙盒获取,然后拼接名字。
注意:将设置夜间模式和皮肤的标识存放到沙盒里面。
方法四:(更适用于动态换肤)提供不同文件夹下相同的图片名,换肤时,换文件名。并且在每个文件夹下面将保存各自信息的plist文件。
文件夹名从沙盒中取。

初始化时设置默认皮肤
+ (void)initialize
{
    _color = [[NSUserDefaults standardUserDefaults] objectForKey:HMSkinColor];
    if (_color == nil) {
        _color = @"blue";
    }
}
通过plist文件保存颜色的RGB值,根据对应的皮肤的颜色,加载不同的plist文件。
+ (UIColor *)bgColor
{
    NSString *path = [NSString stringWithFormat:@"skin/%@/bgColor.plist", _color];
    NSString *bgColorPath = [[NSBundle mainBundle] pathForResource:path ofType:nil];
    NSDictionary *bgColorDict = [NSDictionary dictionaryWithContentsOfFile:bgColorPath];
    NSString *bgColorString = bgColorDict[@"label_color"];
    NSArray *bgColors = [bgColorString componentsSeparatedByString:@","];
    NSInteger red = [bgColors[0] integerValue];
    NSInteger green = [bgColors[1] integerValue];
    NSInteger blue = [bgColors[2] integerValue];
    return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}
对外提供换肤的方法,将用户选中的皮肤保存到沙盒中,
+ (void)setSkinColor:(NSString *)color
{
    _color = color;
    // 4.保存之前用户选中的图片
    [[NSUserDefaults standardUserDefaults] setObject:color forKey:HMSkinColor];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
通过当前皮肤颜色加载不同的皮肤图片。
+ (UIImage *)skinToolWithImageName:(NSString *)name
{
    NSString *imageName = [NSString stringWithFormat:@"skin/%@/%@", _color, name];
    return [UIImage imageNamed:imageName];
}

相关文章

  • 社交分享、内存分析、皮肤

    第三方框架社交分享:友盟 注册应用,获取AppKey加入SDK,导入框架导入头文件,设置AppKey根据需求弹出分...

  • iOS实用技术文集目录

    真机调试 打包测试 程序发布 内购 广告 推送通知 应用程序间跳转 社交分享 内存分析 换肤 硬件信息的获取 静态...

  • iOS内存分析上-图片加载内存分析

    iOS内存分析上-图片加载内存分析 iOS内存分析上-图片加载内存分析

  • 内存分析

    内存分析可以分为静态内存分析和动态内存分析;主要是利用Xcode自带工具进行内存泄露监测; 静态内存分析: 概念:...

  • 内存泄露的分析

    内存泄露的分析 1.静态内存分析 2.动态内存分析概念:

  • Flink JobManager | TaskManager内存

    Flink内存模型分析 JobManager内存模型 TaskManager内存模型 内存模型分析 Flink使用...

  • Memory Analyzer (MAT)Android内存泄漏

    Memory Analyzer (MAT)Android内存泄漏分析,快速定位 专注于Android开发,分享经验...

  • 护肤知识与产品搭配

    那么我今天要分享的课程主讲内容是如何搭配产品怎样专业地分析,好皮肤。怎样专业地分析皮肤对症下药,让客户更加信任你依...

  • iOS - 静态与动态内存分析

    一、静态内存分析 静态内存分析:优点:分析内存非常快,已经可以对整个项目的内存进行分析。缺点:不运行程序,直接对代...

  • Unity 内存分析工具

    分享一个好用的内存分析工具 memoryprofiler https://bitbucket.org/Unity-...

网友评论

      本文标题:社交分享、内存分析、皮肤

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