美文网首页
ios 经典面试案例 (一)

ios 经典面试案例 (一)

作者: 小小鱼类 | 来源:发表于2018-03-27 15:27 被阅读26次

1、iOS iAP内购审核可能失败的问题##

  • Guideline 3.1.1 - Business - Payments - In-App Purchase
    We noticed that your app uses in-app purchase products topurchase credits or currencies that are not consumed within the app, which is not appropriate for the App Store.
  • 苹果提交iAP内购审核的时候,可能出现上面的问题。出现这个问题有可能的原因是因为你的app中在iAP内购中购买的商品,能够通过其他的渠道或者方式购买。此处在AppStore是不允许的。比如,你在安卓充值100元人民币,那么如果商品一样能够使用在iOS设备上,苹果不会允许你上线的。当然这里指的是虚拟类商品。
    另外就是在审核的时候不能以任何方式,通过活动或者兑换码的形式,能够获取到iAP内购中能够获取到的商品

2、App上架后,如何修改app上显示的公司名称?

  • 1.先修改开发者账号中填写的公司名称。
  • 2.再提交更新版本。
    如何修改开发者账号中的公司名称:
    登陆到Apple developer上面,在people里面的开发者列表中找到agent,让agent的这个人直接拨打苹果开发部咨询电话,修改开发者账号上的公司名或者用你注册的账号的邮箱直接写邮件:“我需要更改公司名称”到chinadev@asia.apple.com,让苹果开发部客服来处理。

1、使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?##

  • 系统的某些block api中,UIView的block版本写动画时不需要考虑,但也有一些api 需要考虑:
    所谓“引用循环”是指双向的强引用,所以那些“单向的强引用”(block 强引用 self )没有问题,比如这些:

[UIView animateWithDuration:duration animations:^{ [self.superview layoutIfNeeded]; }]; 

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ self.someProperty = xyz; }]; 

[[NSNotificationCenter defaultCenter] addObserverForName:@"someNotification" 

                                                 object:nil 

                          queue:[NSOperationQueue mainQueue]

                                             usingBlock:^(NSNotification * notification) {

                                                   self.someProperty = xyz; }]; 
  • 这些情况不需要考虑“引用循环”。

但如果你使用一些参数中可能含有 ivar 的系统 api ,如 GCD 、NSNotificationCenter就要小心一点:比如GCD 内部如果引用了 self,而且 GCD 的其他参数是 ivar,则要考虑到循环引用:

__weak __typeof__(self) weakSelf = self;

dispatch_group_async(_operationsGroup, _operationsQueue, ^

{

__typeof__(self) strongSelf = weakSelf;

[strongSelf doSomething];

[strongSelf doSomethingElse];

} );

类似的:

 __weak __typeof__(self) weakSelf = self;

 _observer = [[NSNotificationCenter defaultCenter] addObserverForName:@"testKey"

                                                               object:nil

                                                                queue:nil

                                                           usingBlock:^(NSNotification *note) {

     __typeof__(self) strongSelf = weakSelf;

     [strongSelf dismissModalViewControllerAnimated:YES];

 }];

self —> _observer —> block —> self 显然这也是一个循环引用。

检测代码中是否存在循环引用问题,可使用 Facebook 开源的一个检测工具 FBRetainCycleDetector 。

4、如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图

使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main Dispatch Queue中的结束处理的block。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{ /*加载图片1 */ });

dispatch_group_async(group, queue, ^{ /*加载图片2 */ });

dispatch_group_async(group, queue, ^{ /*加载图片3 */ }); 

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

        // 合并图片

});

题的搬运,不成敬意!

相关文章

网友评论

      本文标题:ios 经典面试案例 (一)

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