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博客园
  • 相关阅读:
    linux c dlopen加载动态链接库
    c++锁 测试 (gcc test.cpp -o test -lpthread)
    shell 清理目录下 超过一段时间的数据。
    大话存储学习笔记
    python总结
    正则表达式使用
    #linux shell#模拟日志生成过程
    深入理解Java虚拟机
    Nginx修改access.log日志时间格式
    mfcs100d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/6406425.html
Copyright © 2011-2022 走看看