zoukankan      html  css  js  c++  java
  • iOS开发随笔

    1、统一类前缀

      类的前缀,可以这样加点击 target,在XCode最右侧的栏目里面会看到如下界面,在箭头处填写即可

      

     2、storyboard设置view的宽高比

      假如要设置View的宽高比为2:1
      (1)先将view的frame调整为2:1,比如width=200,height=100;
      (2)勾选Aspect Ratio

    3、storyboard中控件的约束线也能拖拽成属性,方便代码修改!

    4、类别(Category)和扩展(Extension)

      类别是类方法的扩展,不能添加属性!但是可以通过runtime进行添加

      扩展就是在类中声明属性@property

    5、线程的死锁和互斥

      死锁:线程相互等待 例如: 同步主线程刷新!

      互斥:多线程并行修改同一个资源 例如:卖票等!

    6、weak修饰属性时:当改属性的引用计数为0时,会将指针指向nil,底层实现就是hash表http://www.bijishequ.com/detail/314557?p=

    7、ARC下OF(Core Foundation例如Core Graphics、Core Text)和OC对象的转换需要用到__bridge,__bridge_transfer,__bridge_retained

    8、获取请求时间 

       CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();

      NSLog(@"link in time %f",end - start)

    9、Xcode 8.1或更高版本,在使用Editor中的Create NSManagedObject Subclass 这个命令的时候,需要先把这个model的Codegen设置为Manual/None,否则会报错,

    10、修改文件为 可执行: chmod +x 文件  ,先cd 到上一级文件夹;

    11、AFN默认对请求参数(NSMutableDictionary)内字段进行UTF-8编码,直接发送字符串不行!

    12、iOS6.0之后废弃ViewDidUnload方法! 

    13、KVO的实现是isa混写(isa-swizzling),创建新类并重新set方法,将isa指针指向这个新类!

    14、判断当前是iPhone几:

        struct utsname systemInfo;
        uname(&systemInfo);
        NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

    15、 正弦波

    y=峰高* sin(x * M_PI / self.frame.size.width * 峰的数量 + 移动速度)

    16、touchBegin失效

      创建UIScrollView 或 UIImageView 时,当点击时UIScrollView 或 UIImageView 会截获touch事件,导致touchesBegan: withEvent:/touchesMoved: withEvent:/touchesEnded: withEvent: 等方法不执行。解决办法:当UIScrollView 或 UIImageView 截获touch事件后,让其传递下去即可(就是传递给其父视图UIView)

    17、延迟函数的使用和取消(适用于多次点击同一个事件,弹框延迟消失)

    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;//延迟函数
    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;//取消延迟

    18、bounds的影响(CAScrollLayer就是通过改变自己的原点位置,影响子view的显示)

    (1)它可以修改自己坐标系的原点位置,影响“子view”的显示位置。
    (2) bounds,它可以通过改变宽高,改变自身的frame,进而影响到再父视图的显示位置(平均扩充或缩减四周的区域)和大小。

    19、开发者团队

    •   苹果提供了Agent、Admin、Member、No Access四种团队身份,它们分别拥有不同的权限。
    •   Agent:代理人。这个账号就是创建团队的账号,它拥有最大权限,且不会允许其他Admin修改Agent权限。但是Agent账号可以将权限转移。 
    •   Admin:管理员。它拥有几乎所有内容的管理权限 
    •   Member:成员。有权访问、下载一些信息,但是不能进行修改、管理 
    •   No Access:无权限。(因为后台有iOS、Mac、Safari三个模块,因此每个模块可以限定是否可以访问)

    20、开发者账号

    1>.个人账号
    ①费用:99 美元/年
    ②协作人数:仅限开发者自己
    ③不需要填写公司的邓百氏编码( D-U-N-S Number)
    ④支持账号下的 app 上线 App Store
    ⑤需要创建 Apple ID
    2>.公司账号
    ① 费用:99 美元/年
    ② 允许多个开发者协作开发
    ③ 需要填写公司的邓百氏编码( D-U-N-S Number)
    ④ 该账号下的 app 可上线至 App Store
    ⑤ 需要创建 Apple ID
    3>.企业账号
    ① 费用:299 美元/年
    ② 允许多个开发者协作开发
    ③ 需要填写公司的邓百氏编码( D-U-N-S Number)
    ④ 该账号下的 app 不能发布到 App Store 中
    ⑤ 需要创建 Apple ID
     
    21、PCH文件的创建
      1)新建New File -->>(iOS)Other 中的PCH File文件;
      2)Build Settings -->> Apple LLVM 9.0 - Language --->>Prefix Header 设置PCH文件路径(拖动就行);
     
    22、swift和Oc混编桥接文件
      1) 在OC工程中创建swift文件是会提示时候自动创建桥接文件
      2)自己手动创建桥接文件(前提示工程中有swift文件)
        新建New File -->> (iOS)Source 的Header File 文件
        Build Settings -->>Switf Compiler - Generl -->>Objective-C Bridging Header 设置桥接文件路径(项目名/项目名-Bridging-Header.h 桥接文件一般格式)
      注意:OC工程使用swift文件需要导入 #import "工程名-Swift.h"头文件;Swift工程使用OC文件需要在桥接文件到人OC头文件即可!
     
    23、判断版本号
    if (@available(iOS 8.2, *)) {
          //iOS 8.2版本之后
    } else {
          
    }

    24、精简代码,返回最后一句的值

        self.backScrollView.frame = ({
            CGRect frame = self.backScrollView.frame;
            frame.origin.y = self.view.frame.origin.y - 10;
            frame;
        });

     25、子视图自适应父视图

    @property(nonatomic) BOOL               autoresizesSubviews; // default is YES. 
    @property(nonatomic) UIViewAutoresizing autoresizingMask;

     26、获取字符串中的数字

        NSCharacterSet* nonDigits =[[NSCharacterSet decimalDigitCharacterSet] invertedSet];
        int remainSecond =[[urlString stringByTrimmingCharactersInSet:nonDigits] intValue];
        NSLog(@" num %d ",remainSecond);

     27、Objective-C Literals 字面量创建

    NSArray *array = @[@"One String", @"Two"];

    28、创建Category分类

    1、文件列表右键-->选择New File...
    2、选择iOS-->Source -->Objective-C File
    3、File:文件起名
       File Type:文件类型Empty File(空文件)、Category(分类)、Protocol(协议)、Extension(扩展)
      Class:类名

     29、三目运算符

    rootID ?rootID: @""  和 rootID ?: @"" 效果等同

     30、gem sources 淘宝不在维护

    https://gems.ruby-china.org/

    31、超出view部分拥有点击事件,重写view的hitTest withEvent事件

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
        UIView *view = [super hitTest:point withEvent:event];
        if (view == nil) {
            for (UIView *subView in self.subviews) {
                CGPoint tp = [subView convertPoint:point fromView:self];
                if (CGRectContainsPoint(subView.bounds, tp)) {
                    view = subView;
                }
            }
        }
        return view;
    }
    ForeverGuard博客园
  • 相关阅读:
    4 Apr 18 软件开发目录 logging模块的使用 序列化(Json, Pickle) os模块
    3 Apr 18 内置函数 列表生成式与生成器表达式 模块的使用之import 模块的使用之from…import…
    2 Apr 18 三元表达式 函数递归 匿名函数 内置函数
    30 Mar 18 迭代器 生成器 面向过程的编程
    29 Mar 18 函数 有参、无参装饰器
    28 Mar 18 函数
    27 Mar 18 函数的参数
    26 Mar 18 函数介绍
    23 Mar 18 文件处理
    22 Mar 18 补充数据类型+字符编码+文件处理
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/6406425.html
Copyright © 2011-2022 走看看