专栏首页iOS 开发杂谈iOS 开发小技巧

iOS 开发小技巧

如何快速的查看一段代码的执行时间。

#define TICK \
    NSLog(@">>>> Begin");\
    CFTimeInterval begin = CACurrentMediaTime();

#define TOCK \
    CFTimeInterval end = CACurrentMediaTime();\
    NSLog(@"%@", [NSString stringWithFormat:@"%@ - %@ms",NSStringFromClass([self class]), @(1000 * (end - begin))]);\
    NSLog(@"<<<< End");

在想要查看执行时间的代码的地方进行这么处理

TICK
//do your work here
TOCK

view 的锯齿化的问题

在使用view的缩放的时候,layer.border.width随着view的放大,会出现锯齿化的问题,解决这个问题需要设置这个属性。

self.layer.allowsEdgeAntialiasing = YES;

忽略不必要的警告⚠️

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        return [target performSelector:action withObject:params];
#pragma clang diagnostic pop

pop 到指定 ViewController

UINavigationController 有个 Property,是一个存储所有 pushnavigationcontroller 的视图的集合,是一个栈结构,当我们要 pop 到某个 ViewController 的时候,直接用 for in 去遍历 viewControllers 即可:

for (UIViewController viewController in self.navigationController.viewControllers) {
    if ([viewController isKindOfClass:[AccountManageViewController class]]) {
        [self.navigationController popToViewController:viewController animated:YES];
    }
}

通过 View 获取 ViewController

为了做到数据与视图的分离,我们一般会将一个页面的局部视图以自定义 UIView 的方式独立出来,如果在该视图中有触发事件(事件处理不需要父视图的上下文),就会遇到在 UIView 中获取 UIViewController 的情况,可以写一个 UIView 的范畴 UIView(UIViewController)

#pragma mark - 获取当前view的viewcontroller
+ (UIViewController *)getCurrentViewController:(UIView *) currentView {
       for (UIView* next = [currentView superview]; next; next = next.superview) {
             UIResponder *nextResponder = [next nextResponder];
             if ([nextResponder isKindOfClass:[UIViewController class]]) {
                  return (UIViewController *)nextResponder;
             }
      }
     return nil;
}

iOS cocoapods一些用法备忘

一般我们在Podfile文件中指定在某个特定的scheme下引用某个框架,写法如下:

pod 'PgyUpdate', :configurations => ['Adhoc','AdhocDebug']
pod 'Reveal-iOS-SDK', '1.5.1', :configurations => ['Debug']

可以指定某个自定义框架的地址:

pod 'zucheLib_Category', :git => 'http://10.3.4.127:8888/ios_team/zuchelib_category.git', :tag => ‘0.1.2’

如果在自定义的框架下,我们使用#if DEBUG这种定义模式来区分,那么在默认Pods中是无效的。需要使用以下方法打开Debug的编译配置:

post_install do |installer_representation|
    installer_representation.pods_project.targets.each do |target|
        if target.name == 'zucheLib_Networking'
            target.build_configurations.each do |config|
                if config.name != 'Release'
                    config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'DEBUG=1']
                end
            end
        end
    end
end

如果多个target都需要引用某些公共的Pods类库框架可以使用如下写法:

def shared_pods
   platform :ios, '7.0'
   inhibit_all_warnings!  # 关闭所有警告
   #network
   pod 'AFNetworking', '~> 3.0'
end
target "XXXXXXX" do
   shared_pods
end

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 谈谈 Autolayout

    刚开始使用 Autolayout 遇到下面的警告人容易让人气馁,经常不知所措而放弃了使用 Autolayout。

    s_在路上
  • 如何手动实现一个 UIScrollView

    UIKit 坐标系每一个 View 都定义了他自己的坐标系,如下图所示,x 轴指向右方,y 轴指向下方:

    s_在路上
  • iOS开发之iOS10适配

    公司的项目,临上线之前做了一下iOS10的适配,发现一大堆的坑,瞬间觉得苹果不友好了。 一、证书问题 打开xcode8.0时编译运行时出现下面问题:

    s_在路上
  • 马斯克遭卖空者起诉,特斯拉退市被控人为推高股价

    【新智元导读】周五,马斯克以及特斯拉公司遭到投资者两起起诉,被指“特斯拉退市”计划旨在使用欺诈手段挤压卖空者。卖空者一直令马斯克感到恼火,这次,钢铁侠又有麻烦了...

    新智元
  • 大数据告诉你,移动互联网是如何吃掉整个世界的

    Managershare:这个世界已经被移动互联网改变了。它大到世界,小到我们每个人的生活细节。 没错,我们正站在这样一个特别的历史拐点上。 第一次,技术被销售...

    小莹莹
  • 你可能不知道的15个有用的Github功能

    我们平时的工作中,github是必不可少的代码托管平台,但是大多数同学也只是把它做为了托管代码的地方,并没有合理的去运用。

    前端森林
  • laravel框架中视图的基本使用方法分析

    本文实例讲述了laravel框架中视图的基本使用方法。分享给大家供大家参考,具体如下:

    砸漏
  • appium+python自动化56-微信小程序自动化

    最近微信的小程序越来越多了,随之带来的问题是:小程序如何做自动化测试? 本篇以摩拜小程序为例,介绍如何定位小程序里面的元素

    上海-悠悠
  • python自动代理切换

    py3study
  • go语言的sql包原理与用法分析

    go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。...

    李海彬

扫码关注云+社区

领取腾讯云代金券