日期: 2021 年 6 月 18 日

48. 旋转图像(JS实现)

48. 旋转图像(JS实现)

1 题目
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]

2 思路
这道题可以先转置矩阵,然后再颠倒每一行的顺序

3代码
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
let len = matrix.length;
if (len <= 1) return;

for (let i=0;i<len;i++) {
for(let j=0;j<len;j++) {
if (i>=j) swap(i,j, matrix);
}
}

for (let i=0; i<len;i++) {
matrix[i].reverse();
}

function swap(i, j, matrix) {
let temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
};

50. Pow(x, n)(JS实现)

50. Pow(x, n)(JS实现)

1 题目
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

2 思路
这道题利用递归实现快速幕的计算,其中心思想是在递归的过程中判断n的奇偶,来实现平方的平法,从而快速计算

3代码
/**
* @param {number} x
* @param {number} n
* @return {number}
*/
var myPow = function(x, n) {

return n < 0 ? quick(1/x, -n) : quick(x, n);

function quick(x, n) {
if (n === 0) return 1;

let result = quick(x, Math.floor(n / 2));

return n % 2 === 0 ? result * result : result * result * x;
}
};

53. *大子序和(JS实现)

53. *大子序和(JS实现)

1 题目
给定一个整数数组 nums ,找到一个具有*大和的连续子数组(子数组*少包含一个元素),返回其*大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和*大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

2 思路
这道题利用动态规划的方法,假设以i为结尾的子串*大值为f(i),那么状态转移方程f(i+1) = max(f(i) + nums[i+1], nums[i+1])

3代码
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
let len = nums.length;
let max = nums[0];
let pre = 0;

for (let i=0;i<len;i++) {
pre = Math.max(pre + nums[i], nums[i]);
max = Math.max(max, pre);
}

return max;
};

关于iOS 10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS的方法

iOS 10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS,也就是说强制我们用HTTPS,如果不这样的话提交App可能会被拒*。但是我们可以通过NSExceptionDomains来针对特定的域名开放HTTP可以容易通过审核。)

由于离2017年越来越近,关于苹果强制我们使用HTTPS,我搜集了一下资料如下:

%title插图%num
Apple官方文档

WWDC Session: “Networking with NSURLSession” session( 【WWDC 2015 session 703, “Privacy and Your App” O网页链接 】, 时间在30:18左右)

%title插图%num

%title插图%num

%title插图%num

即使你的应用使用的是:你没有权限控制的CDN (Content Delivery Network),而且它不支持HTTPS!

也别担心,Apple都替你考虑好了:

正如你在上图中看到的:苹果官方提供了一些可选配置项来决定是否开启ATS模式,也就是可以选择开启或者不开启。

开发者可以针对某些确定的URL不使用ATS,这需要在工程中的info.plist中标记NSExceptionDomains。在NSExceptionDomains字典中,可以显式的指定一些不使用ATS的URL。这些你可以使用的例子可以是:

NSIncludesSubdomains

NSExceptionAllowInsecureHTTPLoads

NSExceptionRequiresForwardSecrecy

NSExceptionMinimumTLSVersion

NSThirdPartyExceptionAllowsInsecureHTTPLoads

NSThirdPartyExceptionMinimumTLSVersion

NSThirdPartyExceptionRequiresForwardSecrecy

这些关键字使我们可以更加细致的设置针对不使用ATS的域名情况下禁用ATS或者一些特殊的ATS选项。

你可能注意到一些关键字像是使用了一些其他关键字中的词但是在前面加上了”ThirdParty”字样,比如列表里*后三个:

NSThirdPartyExceptionAllowsInsecureHTTPLoads

NSThirdPartyExceptionMinimumTLSVersion

NSThirdPartyExceptionRequiresForwardSecrecy

在功能上,这些关键字与不含有”ThirdParty”的关键字有同样的效果。而且实际运行中所调用的代码将会完全忽略是否使用”ThirdParty”关键字。你应该使用适用于你的场景的关键字而不必过多考虑这些。

关于App Transport Security,每个应用都属于4个大类当中的一类。我们来看看每一个大类都是怎样影响应用的。

— 分类名 解释
1. HTTPS Only (只有HTTPS,所有情况下都使用ATS) 如果你的应用只基于支持HTTPS的服务器,你的应用不需要做任何改变。但是,注意App Transport Security要求TLS 1.2,而且它要求站点使用支持forward secrecy协议的密码。证书也要求是符合ATS规格的。因此慎重检查与你的应用交互的服务器是不是符合ATS的要求。
2. Mix & Match(混合) 如果你的服务器不符合ATS要求,你需要在你的应用的 Info.plist 文件中说明哪些地址是不符合ATS要求的。
3. Opt Out(禁用ATS) 如果你在创建一个网页浏览器,因为你不能确定用户将要访问哪个网页,也就不可能指明这些网页是否支持ATS要求且在HTTPS上传输。在这种情况下,只能配置为禁用ATS。
4. Opt Out With Exceptions(除特殊情况外,都不使用ATS) 如果想禁用ATS的同时又想定义一些例外。这个应用场景是当你的应用需要从很多不符合ATS要求的服务器上取数据,但是也要与一个你可控的API(符合ATS要求)交互。在这种情况下,需要在应用的 Info.plist 文件中配置为允许所有请求,但是你也指定了一个或多个例外来表明哪些请求是必须符合ATS的要求。
下面分别做一下介绍:

1.HTTPS Only (只有HTTPS,所有情况下都使用ATS)
如果你的应用只基于支持HTTPS的服务器,那么你太幸运了。你的应用不需要做任何改变。

唯一需要做的事情就是使用 NSURLSession 。如果你的开发目标是iOS 9或者 OS X EI Capitan之后,ATS 的*佳实践将会应用到所有基于 NSURLSession 的网络。

但也有人遇到过这样的疑惑:服务器已支持TLS 1.2 SSL ,但iOS9上还是不行,还要进行本文提出的适配操作。

那是因为:要注意 App Transport Security 要求 TLS 1.2,而且它要求站点使用支持forward secrecy协议的密码。证书也要求是符合ATS规格的,ATS只信任知名CA颁发的证书,小公司所使用的 self signed certificate,还是会被ATS拦截。因此慎重检查与你的应用交互的服务器是不是符合ATS的要求非常重要。对此,建议使用下文中给出的NSExceptionDomains,并将你们公司的域名挂在下面。

官方文档 App Transport Security Technote 对CA颁发的证书要求:

Certificates must be signed using a SHA256 or better signature hash algorithm, with either a 2048 bit or greater RSA key or a 256 bit or greater Elliptic-Curve (ECC) key. Invalid certificates result in a hard failure and no connection

2.Mix & Match(混合)
如果你的服务器不符合ATS要求。

比如当你遇到以下三个不符合 ATS 要求的服务器的域名时:

api.insecuredomain.com
cdn.domain.com
thatotherdomain.com
你可以分别设置如下:

api.insecuredomain.com

Info.plist 配置中的XML源码如下所示:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>api.insecuredomain.com</key>
<dict>

<!–允许App进行不安全的HTTP请求–>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>

<!–适用于这个特定域名下的所有子域–>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
在 plist 文件里显示如下:

 

我们定义的*个“例外”(Exception)告诉ATS当与这个子域交互的时候撤销了必须使用HTTPS的要求。注意这个仅仅针对在“例外”(Exception)中声明了的子域。非常重要的一点是要理解NSExceptionAllowsInsecureHTTPLoads关键字并不仅仅只是与使用HTTPS相关。这个“例外”(Exception)指明了对于那个域名,所有的App Transport Security的要求都被撤销了。

cdn.domain.com Info.plist 配置中的XML源码如下所示:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>cdn.somedomain.com</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
在 plist 文件里显示如下:

 

很可能你的应用是与一个支持HTTPS传输数据的服务器交互,但是并没有使用TLS 1.2或更高。在这种情况下,你定义一个“例外”(Exception),它指明应该使用的*小的TLS的版本。这比完全撤销那个域名的App Transport Security要更好更安全。

thatotherdomain.com

Info.plist 配置中的XML源码如下所示:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>thatotherdomain.com</key>
<dict>
<!–适用于这个特定域名下的所有子域–>
<key>NSIncludesSubdomains</key>
<true/>
<!–扩展可接受的密码列表:这个域名可以使用不支持 forward secrecy 协议的密码–>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<!–允许App进行不安全的HTTP请求–>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!–在这里声明所支持的 TLS *低版本–>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
在 plist 文件里显示如下:

NSIncludesSubdomains 关键字告诉 App Transport Security 这个“例外”(Exception)适用于这个特定域名的所有子域。这个“例外”(Exception)还进一步通过扩展可接受的密码列表来定义这个域名可以使用不支持forward secrecy(NSExceptionRequiresForwardSecrecy ) 协议的密码。想了解更多关于forward secrecy的信息,推荐去看官方文档Apple’s technote 。

如果你的App中同时用到了这三个域名,那么应该是这样:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>api.insecuredomain.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<false/>
</dict>
<key>cdn.somedomain.com</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<key>thatotherdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>

3. Opt Out(禁用ATS)
上面是比较严谨的做法,指定了能访问哪些特定的HTTP。当然也有暴力的做法: 彻底倒退回不安全的HTTP网络请求,能任意进行HTTP请求,比如你在开发一款浏览器App,或者你想偷懒,或者后台想偷懒,或者公司不给你升级服务器。。。

你可以在Info.plist 配置中改用下面的XML源码:

<key>NSAppTransportSecurity</key>
<dict>
<!–彻底倒退回不安全的HTTP网络请求,能任意进行HTTP请求 (不建议这样做)–>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
在 plist 文件里显示如下:

4. Opt Out With Exceptions(除特殊情况外,都不使用ATS)
上面已经介绍了三种情景,还有一种可能你也会遇到:

当你禁用ATS的同时又想定义一些“例外”(Exception)。这个应用场景是当你的应用需要从很多不符合ATS要求的服务器上取数据,但是也要与一个你可控的API(符合ATS要求)交互。在这种情况下,在应用的Info.plist文件中配置为允许所有请求,但是你也指定了一个或多个“例外”(Exception)来表明哪些地址是必须符合 App Transport Security 要求的。下面是Info.plist文件应该会有的内容:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>api.tutsplus.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<false/>
</dict>
</dict>
</dict>
在 plist 文件里显示如下:

【注:以上在Info.plist配置中的做法已经验证可行,但目前Apple的prerelease版本的官方文档并未提及Info.plist中配置的代码,我将密切关注官方文档,如有提及,再来更新本文 .你若发现官方文档有提及了,也可在微博@iOS程序犭袁通知下我。】(官方文档已经有阐述)

Certificate Transparency
虽然ATS大多数安全特性都是默认可用的,Certificate Transparency 是必须设置的。如果你有支持Certificate Transparency的证书,你可以检查NSRequiresCertificateTransparency关键字来使用Certificate Transparency。再次强调,如果你的证书不支持Certificate Transparency,此项需要设置为不可用。

如果需要调试一些由于采用了ATS而产生的问题,需要设置CFNETWORK_DIAGNOSTICS为1,这样就会打印出包含被访问的URL和ATS错误在内的NSURLSession错误信息。要确保处理了遇到的所有的错误消息,这样才能使ATS易于提高可靠性和扩展性。

原文地址:https://github.com/ChenYilong/iOS9AdaptationTips#1-demo1_ios9%E7%BD%91%E7%BB%9C%E9%80%82%E9%85%8D_ats%E6%94%B9%E7%94%A8%E6%9B%B4%E5%AE%89%E5%85%A8%E7%9A%84https

 

iOS中进行数据压缩

在实际开发中,我们经常要对比较大的数据进行压缩后再上传服务器,下面是我在项目中压缩数据时所使用的压缩方法:

对数据进行压缩:

zipAndUnzip *zipAnd = [[zipAndUnzip alloc] init];

NSString *str = @”六六六六了还是德国大使馆和低俗化工及第三方换个撒点恢复健康的十分好的设计哈佛的号发的撒开了凤凰健康的十分健康的沙发”;
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSData *dataDeflate = [zipAnd gzipDeflate:data];

对数据进行解压:

NSData *dataInflate =  [zipAnd gzipInflate:dataDeflate];
NSString *aString = [[NSString alloc] initWithData:dataInflate encoding:NSUTF8StringEncoding];

压缩的方法是:

//压缩
– (NSData *)gzipDeflate:(NSData*)data
{
if ([data length] == 0) return data;

z_stream strm;

strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.total_out = 0;
strm.next_in=(Bytef *)[data bytes];
strm.avail_in = (uInt)[data length];

// Compresssion Levels:
// Z_NO_COMPRESSION
// Z_BEST_SPEED
// Z_BEST_COMPRESSION
// Z_DEFAULT_COMPRESSION

if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, (15+16), 8, Z_DEFAULT_STRATEGY) != Z_OK) return nil;

NSMutableData *compressed = [NSMutableData dataWithLength:16384]; // 16K chunks for expansion

do {

if (strm.total_out >= [compressed length])
[compressed increaseLengthBy: 16384];

strm.next_out = [compressed mutableBytes] + strm.total_out;
strm.avail_out = (uInt)([compressed length] – strm.total_out);

deflate(&strm, Z_FINISH);

} while (strm.avail_out == 0);

deflateEnd(&strm);

[compressed setLength: strm.total_out];
return [NSData dataWithData:compressed];
}

解压缩的方法是:

//解压缩
– (NSData *)gzipInflate:(NSData*)data
{
if ([data length] == 0) return data;

unsigned long full_length = [data length];
unsigned long half_length = [data length] / 2;

NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];
BOOL done = NO;
int status;

z_stream strm;
strm.next_in = (Bytef *)[data bytes];
strm.avail_in = (uInt)[data length];
strm.total_out = 0;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;

if (inflateInit2(&strm, (15+32)) != Z_OK)
return nil;

while (!done)
{
// Make sure we have enough room and reset the lengths.
if (strm.total_out >= [decompressed length])
[decompressed increaseLengthBy: half_length];
strm.next_out = [decompressed mutableBytes] + strm.total_out;
strm.avail_out = (uInt)([decompressed length] – strm.total_out);

// Inflate another chunk.
status = inflate (&strm, Z_SYNC_FLUSH);
if (status == Z_STREAM_END)
done = YES;
else if (status != Z_OK)
break;
}
if (inflateEnd (&strm) != Z_OK)
return nil;

// Set real length.
if (done)
{
[decompressed setLength: strm.total_out];
return [NSData dataWithData: decompressed];
}
else return nil;
}

这个压缩实质上是二进制压缩的文件,可以对任何二进制文件进行压缩

关于如果解决 iOS 虚拟键盘弹出 fixed 定位错乱的方法

其实网上有很多所谓的解决方案,但真正能解决的没几个,都是复制黏贴的文章,说真的,真没啥意思。

%title插图%num%title插图%num

关于如何如果去解决 iOS 虚拟键盘弹出 fixed 定位错乱的问题?回归源头,那就是不要用 fixed 定位,当然,我是指带 input 和 textarea 需要呼出虚拟键盘的页面,并不是全盘否定大全局禁用 fixed 定位。

页面常见布局分别为 header、main、footer 三部分,或者 header、main 两部分,亦或者 main、footer 两部分,我就拿 header、main、footer 做例子,如图:

%title插图%num%title插图%num

这种布局,要嘛头部有输入框,要嘛内容区有,要嘛底部有,遇到这种页面,慎用 fixed 定位。

解决的方案就是,按照 document 自带的流式布局,中间 main 高度为:

mainHeight = window.body.clientHeight - (header.clientHeight + footer.clientHeight);

动态计算设置中间 main 固定高度,然后让其 overflow-y => scroll, 也就是局部内容滚动。(推荐使用 flex 上下中弹性布局)
酱紫,就解决了虚拟键盘弹出 fixed 定位错乱的问题了,因为在这里压根没用 fixed 定位,所以问题不成立。

在这里还有个坑,我需要提及的,就是如果你的输入框是在 footer 的,那么就会存在当虚拟键盘呼出的时候,挡住输入框,需要手动慢慢挪动到输入框的位置,这个体验很蛋疼,当然亲测在 Andorid 终端表现良好,暂时不见这种问题,但是在 iOS 终端问题就来了,如图:

%title插图%num%title插图%num

这个时候就要用到一个方法 scrollIntoView,字面意思直译已经很明白,具体细节这里不做阐述。

想了解更多请点击下面链接:
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

回归问题,我的解决思路是,给你的 input 绑定个 focus 事件,当 focus 事件触发的时候,调用 scrollIntoView 这个方法:

<input type="text" id="footerInput" οnfοcus="InputScrollIntoView(this.id)" placeholder="此处应该写点啥" />

<script type="text/javascript">
var InputScrollIntoView = function(id) {
  document.getElementById(id).scrollIntoView(true);
}
</script>

然后当学习键盘呼出的时候,底部输入框就会自动跑到虚拟键盘上面,并且紧贴着虚拟键盘,如图:

%title插图%num%title插图%num

目前利用此方案没有遇到啥问题,欢迎拍砖指正,互相学习。

done!

ios软键盘弹出时输入框fixed布局被遮挡问题

做一个类似于手机端QQ动态详情页面,该页面有一个置于页面底部的评论输入框,刚开始单纯的以为这没什么难的,使用fixed布局不就是So easy!么,在安卓上也是意料之中完美的效果,然并卵,在ios上有时输入框却被软键盘遮挡,经过在度娘上的多方查找,发现原来是ios对fixed布局有兼容问题,导致fixed布局不稳定,软键盘弹起时fixed布局可能会改为absolute布局,总之这是一个需要修复的bug,又是各种搜索之后,看到了前辈们对这种问题的各种经验,作为一个前端新手,我只能GET到一些JS的解决方法,*终解决办法如下:

 // 输入框在iphone中被遮挡问题   
if(/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
     $('.comment-panel input').on('touchstart',function(e){
           document.body.scrollTop = document.body.scrollHeight;
       });
}

但是经过测试发现当ios的采用搜狗输入法的时候,有时会有遮挡一半输入框,这个问题出现的几率很小,但仍未解决,这也算是系统的一个bug,希望有解决的前辈们看到能指点一二!

iPhone http Post数据

之前有篇博文介绍从服务器下载数据,再写一篇基于HTTP协议向服务器发送数据的。

这里介绍两种方式,一种用于发送普通数据,一种用于发送xml文件。

这两种方式的区别不大,主要就是NSMutableURLRequest中几个属性的设置。

1、NSMutableURLRequest发送普通数据

view plain copy to clipboard print ?
  1. NSString *postString = [NSString stringWithFormat:@”name=%@&password=%@”,nameFiled.text,passFiled.text];
  2. //将post数据转换为 NSASCIIStringEncoding 编码格式
  3. NSData *postData = [postString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
  4. NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
  5. [request setURL:[NSURL URLWithString:@”http://www.wxxf.com/client/login.action”]];
  6. [request setHTTPMethod:@”POST”];
  7. [request setHTTPBody:postData];

服务器端代码:

view plain copy to clipboard print ?
  1. <%
  2. String name = request.getParameter(“name”);
  3. System.out.println(“name=”+name);
  4. %>

2、NSMutableURLRequest发送xml

view plain copy to clipboard print ?
  1. NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
  2. [request setURL:[NSURL URLWithString:@”http://www.wxxf.com/client/login.action”]];
  3. [request setHTTPMethod:@”POST”];
  4. [request addValue:@”text/xml” forHTTPHeaderField: @”Content-Type”];
  5. //xml内容
  6. NSMutableData *postBody = [NSMutableData data];
  7. [postBody appendData:[[NSString stringWithFormat:@”<Request Action=\”Login\”>”] dataUsingEncoding:NSUTF8StringEncoding]];
  8. [postBody appendData:[[NSString stringWithFormat:@”<Body>”] dataUsingEncoding:NSUTF8StringEncoding]];
  9. [postBody appendData:[[NSString stringWithFormat:@”<Username>wangjun</Username>”] dataUsingEncoding:NSUTF8StringEncoding]];
  10. [postBody appendData:[[NSString stringWithFormat:@”<Password>password</Password>”] dataUsingEncoding:NSUTF8StringEncoding]];
  11. [postBody appendData:[[NSString stringWithFormat:@”<PlatformID>2</PlatformID>”] dataUsingEncoding:NSUTF8StringEncoding]];
  12. [postBody appendData:[[NSString stringWithFormat:@”</Body>”] dataUsingEncoding:NSUTF8StringEncoding]];
  13. [postBody appendData:[[NSString stringWithFormat:@”</Request>”] dataUsingEncoding:NSUTF8StringEncoding]];
  14. [request setHTTPBody:postBody];

上面的代码创建了请求,可以使用同步或异步的方式发送请求

同步方式:

view plain copy to clipboard print ?
  1. NSHTTPURLResponse* urlResponse = nil;
  2. NSError *error = [[NSError alloc] init];
  3. NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

异步方式:

view plain copy to clipboard print ?
  1. NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

iphone全部机型_2020 年 iPhone(全系列) 选购攻略(10 月更新)

1e074009830b040baeb45e052c61f109.png

10月15日更新:

  1. 调整一些内容,新增iPhone 12全系列,
  2. 新增iPhone 12 哪一款才是真香机?

全文目录

一、为什么我要看iPhone选购攻略? 二、了解iphone上的一些概念, 三、iPhone(全系列)参数对比, 四、iPhone常见纠结点, 五、iPhone选购攻略, 六、选购感受、建议,

一、为什么我要看iPhone选购攻略?

在手机行业里,iPhone算是价格比较昂贵的品牌,虽然每年的机型得比较少,可是刚出的机型往往都是价格非常昂贵,让部分人望而止步,但随着时间的推移,接近iPhone每年出新机的时间节点,往往前面的机型会相对来说价格下滑,这个时候出手,是性价比很高的时候。

对于iPhone的选购有几个点值得一说,

1、该不该直接等待*新机型?
2、现机型买了会过时么?
3、现机型何时买?

1、该不该直接等待*新机型?

*新机型刚出的时候不一定是*佳选购时间,说几个原因,
① 价格高,
② 是否出现其他问题,
③ 5G刚出,很多基础建设并没有完善,4G更稳定,

当然,不差钱就直接略过,买买买…

2、现机型买了会过时么?

用过iPhone的人都应该知道,iPhone的手机用个3-4年基本上都没啥问题,一般新机型出来过半年入手,无论从价格,还是性能各方面都能比较清晰的了解到,如果有缺陷,这个时候应该都已经很清楚知道的。

所以现机型是不会那么容易过时,但是有很多小伙伴会有些顾虑,担心到时候5G出来,现在买了,后面会不会又得买5G的手机,其实这个问题很简单,回顾之前4G刚出的时候,无论是手机的5G功能,还是5G基础建设都不完善,通常*批,都是表现一般,会有很多小的问题,iPhone不便宜,为了稳妥,可以等待个1-2年,等个5G市场真正稳定,再进行入手也不迟的。

3、现机型何时买?

简单来说,每逢iPhone新机型推出的时候,是价位下调的时候,这个时候*适宜入手。

二、了解iphone上的一些概念,

尽量以通俗的方式来分享,

1、PD快充,
2、像素密度,
3、LCD屏与OLCD屏
4、摄像头:广角、超广角、长焦,

1、PD快充,

专业名词就不说,简单来说就是通过一种充电协议,让手机达到快速充电的速度,

支持PD快充的机型,通常能比不支持的充电快2-3倍。

2、像素密度,

ppi是像素密度的单位,可以理解为这个数值越大,画面像素越精细,看着的感觉越细腻,很多人在挑选的时候,可能会没有太过注意这个,一般来说也不用去刻意对比这个参数,只要选择视网膜屏幕,基本上ppi是很高的,大于非视网膜ppi*少一倍,

简单来说,选择的时候要选择视网膜屏幕的,看着会很舒服的。

3、LCD屏与OLCD屏

OLCD屏比LCD屏性能更好,更省电,

但OLCD屏更容易有烧屏、闪屏的风险,

4、摄像头:广角、超广角、长焦,

广角,摄像头拍摄的角度更加广阔,
超广角,比广角能容纳的画面景物,
长焦,简单来说就是远景拉近的意思,

三、iPhone(全系列)参数对比,

iPhone(全系列)机型的参数,要是在这里写出来,恐怕会写得很长,所以就花了点时间,把从2017年至今机型参数与做了一个汇总图,方便一些机友作为对比参考(可能会缺少一些参数,但是基本上*主要的都列入了)

1d48a69490c7498e1c74a3d3490e0e28.png

自制 iPhone(全系列)机型的参数图,点击查看大图

iPhone 12系列机型参数对比:

f2b3737398f4905a5d41772148688615.png

自制 iPhone 12 系列机型配置对比图,点击查看大图

为了方便选购的时候对比参考,伙伴们可以收藏此图,或者收藏本文(长期更新)。

四、iPhone常见纠结点,(长期更新)

  1. 选择困难症:iphone SE还是iphone 11?
  2. 2020年了购买iPhonexsmax 还是iPhone11?
  3. iphone 11和iphone 12更值得买哪个?
  4. 现在应该买 iPhone 11还是 iPhone XR ?
  5. iPhone 11、11 Pro、11 Pro Max 哪个更推荐买?

五、iPhone选购攻略,

1、预算充足,追求性能,喜欢小屏(全面屏)选iPhone 12 mini

a119f49e64e4e42b2e6f42025f2c277d.png

iPhone 官网图

iPhone 12 mini 是真小屏机,麻雀虽小,五脏俱全,与iPhone 12相比配置几乎一样,没有被过多阉割(不同点是5G单卡、尺寸上的区别),可以说是小手党的喜好机型,

亮点:A14芯片、支持5G、OLED全面屏、轻薄小巧、颜值高,
不足:电池容量小、没有电池适配器、没有耳机,

2、喜欢传统屏(非全面屏)选 iPhone 8 Plus 或 iPhone SE2

eca1dc86a235e4dfecbe387be120e4c3.png

iPhone 官网图

具体参数就不详说,上面有图,可以对比下,这里主要说下有的伙伴是不太喜欢全面屏,可以选择这2款,而 iPhone 8 Plus 相对来说屏幕会更大点,而 iPhone SE2是小屏幕,很多女生就是喜欢小屏幕,方便一只手操控。

在芯片上,iPhone SE2搭载的是A13,可以说是完胜 iPhone 8 Plus 的A11,不过说实话,A11以上的芯片,其性能都是嗷嗷的,非常强劲了。

3、喜欢全面屏,追求高性价比的,选 iPhone XR,

f84d134c70b0d48915239961afbc6323.png

iPhone 官网图

iPhone XR搭载的芯片是A12,性能上是十分强劲的,尺寸和 iPhone 11一样,摄像就肯定没法和iPhone 11相比,但对比往期款,也是很强的,其他功能如双卡是支持的,颜色选择也是十分丰富,有6种,价位在 iPhone 11刚出那会相差将近一千左右,现在差距估计在五百左右,如果个预算充足,也可以考虑 iPhone 11的。

4、 iPhone 11,(目前算是高性价比阶段)

6cb42ea0882d1071aa2e8d2da62b477c.png

iPhone 11 搭载A13芯片,加上强劲的摄像头,可以说是完美的搭配,尺寸方面也适中,6.1英寸,适合不同人群,不亏为主打款,在各方面都表现很好,虽然说缺点也有很多,但是感觉它优点能覆盖掉缺点,而且目前这个价位,在预算充足情况下,要想高性价比,还真是选它是对的。

PS:截止发文时有900的优惠券,总得来说 iPhone 11低配大概4500左右都能入手了,(当然活动会不断变化的,要持续关注)

5、超 iPhone 11预算,喜欢大屏的,选iPhone XS Max

234a2d3b2b0cf9acaa040af2682b1153.png

iPhone 官网图

iPhone XS Max价位一直没怎么大幅下滑,主要是在于细节把控比 iPhone 11更细腻一些,如屏幕选的是OLED、ppi密度更高等,设计上也相对更简约,更薄,更精致。

6、预算更多,喜好大屏,尝鲜的考虑新机型iPhone 12,

ede6813955682709e0492bf314716959.png

iPhone 官网图

6.1英寸的iPhone 12目测是大众*喜爱的尺寸机型,A14芯片高性能,屏幕素质高,颜值高,总体都是定位走量机型,但是目前处于新机发售阶段,价位略为虚高,预算没那么充足的可以考虑等等,比如双十一,或许会有惊喜,

亮点:A14芯片、支持5G双卡、OLED全面屏、颜值高性能强,
不足:电池容量小、没有电池适配器、没有耳机,

7、不差钱系列,喜欢轻薄的选 iPhone 11 Pro,喜欢大屏的选 iPhone 11 Pro Max

bb77614b779be8a23f746716a84d550e.png

iPhone 官网图

这两款是iPhone目前*强没有之一,搭载A13芯片,摄像头功能都是*强劲的了,其他的也不说了,基本上全支持,全部参数*高的。

8、土豪系列,追求高品质完美的选 iPhone 12 Pro,喜欢大屏的选 iPhone 12 Pro Max

0f961ff4809f4386b31bad28578ff76f.png

iPhone 官网图

旗舰版iPhone 12 Pro/Max 的确看着非常高端,外框采用的材质是手术级不锈钢,背面玻璃材质,摄影比上一代11旗舰版机型提升了,

亮点:A14芯片、支持5G双卡、OLED全面屏、雷达扫描仪、做工精致有质感,
不足:没有电池适配器、没有耳机,

六、选购感受、建议,

还是那句老话,适合自己的才是*好的。

什么才是适合自己的?

在自己预算范围内,选择自己所偏好的,如喜欢大屏,喜欢摄影,追求性能等,当然如无特殊偏好,就选择综合性的(或高性价比的)。

iphone数据恢复工具下载_iOS设备数据恢复软件

Tenorshare UltData for Mac是一款Mac平台上的iOS设备数据恢复软件,UltData Mac版帮您轻松恢复iPhone丢失的照片,通讯录,短信,备忘录,WhatsApp/消息,通话记录,甚至是应用程序数据等多种数据。非常实用,小编现为大家带来ltData Mac版,无需UltData 注册机与序列号,即可帮您完美激活,需要的朋友快来下载使用吧!

337950e430bb3bd0852b71295cd6bca5.png

软件介绍

UltData for Mac是一款适用于MAC的IPHONE数据恢复,面向需要从iPhone设备恢复联系人,消息,短信附件和提醒的用户。使用此应用程序,您可以获取所有丢失的iPhone数据,包括照片,WhatsApp消息,语音备忘录和Safari书签等等。

从任何故障中恢复iPhone操作系统 – 升级/越狱后iPhone会随机重启?iPhone遇到系统崩溃,卡在苹果标志,连接iTunes屏幕等?这些症状表明iPhone操作系统出了问题。无需恢复出厂设置即可将iOS恢复正常,您现在可以通过简单的点击修复iPhone iOS系统崩溃/卡在家中。在系统恢复过程中完美保留原始数据。

您可靠的iOS数据恢复软件:

1.直接从iOS设备,iTunes和iCloud备份恢复数据。

2.有选择地安全地收回丢失的数据。

3.支持20多种文件类型(WhatsApp,短信,联系人,照片等)。

4.兼容*新的iOS 12 Beta。

7dad80361883dbc0accd6264ea9369f2.png

功能介绍

1.毫不费力地找到你丢失的iPhone,iPad,iPod数据 连接您的设备 扫描和搜索 预览和恢复

2.在任何方案中检索丢失的文件 错误删除错误地删除了iPhone数据?Tenorshare UltData可在几分钟内恢复您的数据。升级/降级升级/降级iOS后丢失的数据?这个iOS数据恢复工具将帮助您。出厂重置出厂重置后,重要文件已被删除?这是获取数据的*佳解决方案。越狱即使您的设备已被越狱,Tenorshare UltData也可以恢复您的数据。水损害使用iTunes / iCloud备份从水损坏或死设备中恢复数据。卡住iPhone卡在黑/白屏幕或Apple徽标,如何检索丢失的数据?提前使用UltData。 病毒攻击由于病毒攻击导致数据丢失?别担心,我们的应用程序是还原它们的*佳选择系统崩溃此高级程序可帮助您在系统崩溃或电源故障时重新获得丢失的文件。丢失/被盗您的设备丢失或被盗?调用iPhone数据恢复工具将备份文件还原到另一台设备。锁定/禁用忘记了iPhone,iPad或iPod Touch的密码,我们的软件是另一种解决方案。破碎的屏幕无意中粉碎了你的iDevice,如何立即提取数据?是时候使用Tenorshare UltData了!卡住iPhone卡在黑/白屏幕或Apple徽标,如何检索丢失的数据?提前使用UltData。

3.回收率*高的行业费率UltData可以轻松恢复多达25种具有*高恢复率的文件,这使得它超越所有竞争对手成为顶级iOS数据恢复软件。

4.三种无任何损失地恢复数据的模式这款功能强大的iPhone数据恢复工具提供3种恢复模式,能够在几秒钟内找回您想要的所有内容,从此不会丢失任何单字节。

9410ab3c2c16ce4bcaa527736e95c87b.png

技术要求

支持的文件类型

联系人,SNS消息,iMessage,通话记录,笔记,照片,视频,日历,提醒,语音备忘录,语音邮件,Safari书签,WhatsApp消息,应用程序照片,应用程序视频,应用程序文档,应用程序附件等

支持的设备

所有型号的iPhone,iPad和iPod touch都运行所有iOS版本(包括*新的iOS 12和iPhone XS / XS Max / XR)。

系统要求

Mac OS X 10.14(macOS Mojave)及以下版本

5e47ec86890f73df2850412f94a5ce37.png
友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速