• Object-C知识点 (一) 常用知识点


    Object-C常用的知识点,以下为我在实际开发中用到的知识点,但是又想不起来,需要百度一下的知识点

    #pragma mark -- isKindOfClassisMemberOfClass

    isKindOfClass 是对于继承来讲的 Teacher : Person : NSObject
      teacher 是Teacher、Person、NSObject类或其子类

    isMemberOfClass 是对于该类(Teacher)的成员来讲的 判断是不是由该类创建出来的
      teacher 是Teacher类的成员,由Teacher类创建的 判断的内容更加精确。

    isSubclassOfClass 使用和isKindOfClass差不多/只不过一个是类方法,一个是对象方法

    #pragma mark -- supersuperClassclass的区别

    class:获取方法调用者类名
    superclass:获取方法调用者的父类类名
    super:编译修饰符,不是指针,指向父类的 "标志",
         本质还是拿到当前对象去调用父类的方法
    注意:super并不是拿到父类对象去调用父类方法

    #pragma mark -- removeFromSuperview

    // 移除contentView上所有的子控件
    [self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

    #pragma mark -- isEqual==isEqualToString

    isEqual与==是一样的 比较内存地址
    isEqualToString 比较对象的内容


    可以重写对象的isEqual方法来欺骗系统,通常用来完成从数组中删除某个对象不能实现 (对象一样但是内存地址不一样)

    也可以通过比较内存是否一样进行删除的操作 --->重写更符合封装的原则

    [persons removeObject:person]; 这样返回YES的时候才会去删除该对象,返回NO认为数组中没有该对象,肯定不会删除

    在person.m中实现下面的方法
    - (BOOL)isEqual:(id)object
    {//系统默认
      //return self == object;

    //当一个人的name和年龄一样的时候就认为是同一个人
    return [self.name isEqualToString:other.name] && [self.age isEqualToString:other.age];
    }

    #pragma mark -- nil  Nil  NULL  NSNull

    nil:指向oc中对象的空指针 对象是空的 对象是存在的
    Nil:指向oc中类的空指针 类是空的
    NULL:指向其他类型的空指针,如一个c类型的内存指针 还不是一个对象
    NSNull:在集合对象中,表示空值的对象

    1、NULL表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。

    2、""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。

    3、NULL不是对象,""是对象,所以NULL没有分配空间,""分配了空间

    *******结论********
    在OC/C++中,nil可以调用任何的方法,都不会报错
    NULL 表示地址是0
    nil是指针指向NULL的空对象 nil是一个对象,但是是一个空对象

    若obj为nil:
    [obj message]将返回NO,而不是NSException
    若obj为NSNull:
    [obj message]将抛出异常NSException

    #pragma mark -- NSDictionary

    字典里面添加另外一个字典
    [dictionaryM addEntriesFromDictionary: newDictionary];


    判断字典里面是否包含某一个key
    if ([[dicitionary allKeys] containsObject:key])

    #pragma mark -- NSString

    判断一个字符串是否为空,首先就要确保他不是null(不是空对象),然后再判断他的长度(是一个对象后再判断长度)。

    if(string != NULL && string.length != 0) {字符串里面才有东西}
    if([string isKindOfClass:[NSNull Class]] || string.length == 0) {字符串为空}

    控制台打印的NSNumber和NSString是一样的,需要注意!!!!!

    #pragma mark -- 自定义代码块存放路径

    在Finder文件夹command + Shift + G

    ~/Library/Developer/Xcode/UserData/CodeSnippets

    换新电脑,直接替换文件夹中的内容即可。

    #pragma mark -- Xcode中的快捷键

    停用断点 command+control+
    当前行插入断点 command+
    当前行启用断点 command+option+
    最小化 command+m
    全部最小化 command+option+m
    网络: command + Shift + C
    强制重新启动Mac control+command+右上角
    便签/Xcode的控制台输出 command+shift+Y
    展示文件的真实位置 command+shift+J
    打开emoji表情键盘 command + control + 空格

    显示隐藏文件  shift + Command + .


    类文件之间的跳转 Ctrl + Command + 上箭头 / 下箭头
    折叠代码 command + option(Alt) + 左箭头/右箭头
    退回 command + Ctrl + 左箭头/右箭头
    当前文件中全部选中当前单词 Ctrl + Command + E

    命令行输入 find . -name "*.m" | xargs wc -l 查找当前路径下的所有.m文件行数

    #pragma mark -- 网络安全协议

    URL的基本格式:协议://主机地址/路径
    不同的协议:代表不同的资源查找方式,资源传输方式 http file mailto FTP
    主机地址:存放资源的主机的IP地址
    路径:资源在主机中的具体位置


    <key>NSAppTransportSecurity</key>
    <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    </dict>

    #pragma mark -- 网络字符串编码

    NSString * urlString = @"www.baidu.com/呵呵";
        // 使用这个方法,如果urlString已经进行了UTF8编码,就不会再次编码了。
        NSString * encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8));
    
        NSURL * url = [NSURL URLWithString:encodedString];
        NSLog(@"---url---%@", url);

    #pragma mark -- window

    //这样获得的窗口是目前显示在屏幕最上面的窗口 取出来的可能不是keywindow 因为:键盘也是一个窗口(window)
    UIWindow * window = [[UIApplication sharedApplication].windows lastObject]; 
    UIWindow * window = [UIApplication sharedApplication].keyWindow; 通常用这个

    #pragma mark -- 内存中的五大区域


    栈: 局部变量、当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收.
    堆: OC对象、使用C函数申请的空间. 内存管理中:程序员需要严格控制的部分
    BSS段: 未初始化的全局变量、静态变量. 一旦初始化就回收 并转存到数据段之中.
    数据段: 已经初始化的全局变量、静态变量. 直到程序结束的时候才会被回收.
    代码段: 代码. 程序结束的时候,系统会自动回收存储在代码段中的数据.

    栈、BSS段、数据段、代码段存储在它们中的数据的回收,是由系统自动完成的.不需要我们干预.



    #pragma mark -- 单个对象的内存泄露.



    1).什么叫做内存泄露?

    指对象没有被回收,该回收的时候而没有被回收,一直驻留在内存之中直到程序结束.



    2).单个对象发生内存泄露的原因.

    -> 有对象的创建,没有匹配的release

    -> retain与release不匹配.

    -> 在不恰当的时候,指针赋值为nil

    -> 在方法中不当使用retain.



    3).如何做到单个对象被正确释放

    -> 有对象的创建就要有对象的release。

    -> 有多少个retain就要有多少个release。

    -> 不要轻易的为1个指针赋值为nil 除非指针是1个野指针.

    -> 在方法中不要轻易的为参数retain

    #pragma mark - 枚举

    //枚举的定义
    typedef NS_ENUM(NSUInteger, ActionEnum) {
        ActionEnumTop = 1 << 0,
        ActionEnumBottom = 1 << 1,
        ActionEnumLeft = 1 << 2,
        ActionEnumRight = 1 << 3,
    };
    
    //调用
    [self matchAction:ActionEnumTop | ActionEnumBottom];
    
    //方法的处理
    - (void)matchAction:(ActionEnum)actionEnum
    {
        NSLog(@"%ld", actionEnum);
    
        if ((actionEnum & ActionEnumTop) == ActionEnumTop) {
            NSLog(@"ActionEnumTop");
        }
    
        if ((actionEnum & ActionEnumBottom) == ActionEnumBottom) {
            NSLog(@"ActionEnumBottom");
        }
    
        if ((actionEnum & ActionEnumLeft) == ActionEnumLeft) {
            NSLog(@"ActionEnumLeft");
        }
    
        if ((actionEnum & ActionEnumRight) == ActionEnumRight) {
            NSLog(@"ActionEnumRight");
        }
    }    

    #pragma mark - 去掉字符串"前后"的空格

    // 中间的空格无法去掉.
    str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

     更多内容--> 博客导航 每周一篇哟!!!

    有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!

  • 相关阅读:
    CenOS下搭建PPTP服务
    Nginx做反向代理总是被系统kill
    python排序算法
    linux系统中rsync+inotify实现服务器之间文件实时同步
    HDU
    BZOJ1237: [SCOI2008]配对
    BZOJ2243: [SDOI2011]染色
    BZOJ3192: [JLOI2013]删除物品
    点分治小结
    AtCoder Beginner Contest 124 解题报告
  • 原文地址:https://www.cnblogs.com/CoderEYLee/p/Object-C-0002.html
Copyright © 2020-2023  润新知