第三方框架社交分享:友盟
注册应用,获取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];
}
网友评论