A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

19.深复制与浅复制,NSObject万能指针、id指针、instancetype区别,单例
                1\深复制与浅复制
                        1>深复制:源对象和副本对象是不同的两个对象
                            源对象引用计数器不变,副本对象计数器为1
                            "本质:产生了新的对象
                        2>浅复制:源对象和副本对象是同一个对象
                            源对象引用计数器+1,相当于做一次retain操作
                            "本质是:没有产生新的对象
                            ----只有源对象和副本对象都不可变时,才是浅复制,其他都是深复制---

                2\NSObject万能指针、id指针、instancetype区别
                        1>NSObject和id区别
                            1)NSObject是静态类型,他可以指向任何对象,编译不会报错(弱语法) 也不会警告(里氏替换原则)
                                    "但直接调用NSObject上面不存在的方法是,编译器会报错,想通过NSObeject指针调用特定对象的方法,就必须把NSObject * 强制转换为指定类型
                            2)id是动态类型, 它可以指向属于任何类的对象,也可以理解为万能指针,通过id类型直接调用指向对象中的方法,编译器不会报错
                            补充:"不能使用.语法,因为.语法是编译器特性,而id是运行时特性
                        2>id和instancetype区别
                            1)instancetype只能作为方法的返回值(返回值是这个类本身的对象)
                                id指针是一个万能指针,通常id可以用来定义一个可以指向任何对象的指针变量 ---可以作为返回值---可以作为形参
                            2)id在编译的时候不能判断对象的真实类型
                                instancetype在编译的时候可以判断对象的真实类型
                                "但凡自定义构造方法,返回值尽量使用instancetype,不要使用id

                3\单例
                        单例就是无论怎么创建都只能有一个实例对象,创建的对象地址相同
                        意味着这个单例对象中的属性的值被"共享"
                        当有一些数据需要"共享"给别的类的时候,就可以把这些数据存在单例对象中
                        一般情况下创建一个单例对象的方法是以default或者share开头


#pragma mark - 20.Foundation 关键方法
                        增: add insert append set(重新赋值)
                        删: delete remove drop trimming(一般是修剪前后)
                        改: replace update
                        查: ObjectAtxxx ObjectForxxx
20.Foundation 关键方法
            1\字符串(NSString)***********************
                快速创建字符串:NSString *str = @"IOS";

                "必须背":
                stringWithFormat:方法:创建NSLog()格式的字符串*****
                stringWithUTF8String:方法:将创建的字符串转换为UTF8字符串(C语言字符串转换成OC字符串)*****
                isEqualTostring:方法:比较字符串是否相等*****
                compare:方法:比较字符串的大小*****
                characterAtIndex:方法:返回索引号所在字符串中的字符*****
                length:方法:求字符串的长度*****

                "查:"
                hasPrefix:方法:判断字符串是否以某个字符开始***
                hasSuffix:方法:判断字符串是否以某个字符结束***
                rangeOfString:方法:查找字符串中是否包含其他字符串***

                "改:"
                substringToIndex:方法:从字符串的开头一直截取到指定的位置***
                substringFromIndex:方法:从指定位置开始截取字符串直到结束***
                stringByAppendingPathExtension:方法:为文件添加扩展名***
                stringByAppendingString:方法:字符串后面增加一个新字符串***
                stringByTrimmingCharactersInSet:方法:去除空格或回车***

            可变字符串(NSMutableString)
                "增:
                appendString:方法:在字符串的末尾附加另一个字符串***
                appendFormat:方法:附加一个格式化字符串***
                insertString:方法:在指定位置插入字符串

                "改:
                replaceOccurrencesOfString:方法:替换 将字符串中的某个字全部替换成别一个字***
                stringByReplacingOccurrencesOfString:方法;将字符串中的某个字全部替换成别一个字***
                replaceCharactersInRange:方法:使用字符串代替指定范围的字符串

                "删:
                deleteCharactersInRange:方法:删除指定范围的字符串

                "补充:"
                NSString: 效率高. 不拼接的时候. 同1个字符串对象,如果后面要用. 就不会再创建了.
                大批量拼接效率低, 每次修改字符串都要新建对象.

                NSMutableString: 只要alloc new都是1个新的对象.
                优点:大批量拼接的时候效率高.修改字符串可以不用新建对象


            2\数组对象(NSArray)*********************************************
                快速创建数组:NSArray *arr = @[@"鹏哥", @"庆姐", @"海哥",@"飞哥"];
                count:方法:计算元素个数*****
                "block来遍历NSArray数组."
                - (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block

                "增:
                arrayByAddingObject:方法:在数组末尾添加元素*****

                "改:
                componentsJoinedByString:方法:数组转换为字符串*****
                componentsSeparatedByString:方法:字符串转换为数组(注意:"用字符串调用方法")*****

                "查:
                containsObject:方法:判断数组中是否包含某个元素*****
                firstObject:方法:获取首元素*****
                lastObject:方法:获取最后一个元素*****
                objectAtIndex:方法:获取在某个位置的数组元素*****
                indexOfObject:方法:返回元素所在的位置*****

                "持久化(文件):
                writeToFile:方法:将数组中的内容写入到文件*****(一般写到plist文件实质是XML)

            可变数组(NSMutableArray)
                "增:
                addObject:方法:添加数组元素*****
                addObjectsFromArray:方法:用数组创建可变数组*****
                insertObject:方法:在某一位置插入数组元素*****

                "删:
                removeObject:方法:删除指定的元素*****
                removeAllObjects:方法:删除可变数组中的所有元素*****
                removeLastObject:方法:删除可变数组中的最后一个元素*****
                removeObjectAtIndex:方法:删除指定位置的元素*****
                removeObjectsInRange:方法:删除某个范围内的可变数组中的元素*****

                "改:
                replaceObjectAtIndex:方法:替换可变数组中某一位置的元素*****
                replaceObjectsInRange:方法:替换某一范围的数组元素*****



            3\字典对象(NSDictionary)
                快速创建字典:NSDictionary *dic = @{@"name":@"鹏哥", @"age":@"18"};
                count:方法:字典键-值个数*****
                "block来遍历字典数组."
                - (void)enumerateKeysAndObjectsUsingBlock:(void (^)(KeyType key, ObjectType obj, BOOL *stop))block

                "增:
                dictionaryWithObject:方法:创建具有一个键-值的字典***
                dictionaryWithObjectsAndKeys:方法:创建具有多个键-值的字典***


                "查:
                objectForKey:方法:返回键的值***

                "持久化:
                writeToFile:方法:字典内容写入文件中(一般写到plist文件实质是XML)***


            可变字典(NSMutableDictionary)

                "增:
                setObject:方法:设置键-值***

                "删:
                removeAllObjects:全部清空.
                removeObjectForKey:方法:删除键所对应的值***

                "改:
                setValue:方法:修改值***
#pragma mark - 点招之外
            4\数字对象(NSNumber)-->NSValue的子类
                numberWithInt:方法:创建整型数字对象(整型--->转OC对象)
                intValue  对象类型------>转整型
                isEqualToNumber:方法:比较两对象值是否相等

            >>>>>>>>>>NSValue包装结构体数据valueWithxxx:

            5\文件(NSFileManager)("单例)
                createFileAtPath:方法:创建文件
                copyItemAtPath:方法:复制文件
                moveItemAtPath:方法:移动文件
                removeItemFileAtPath:方法:删除文件
                fileExistsAtPath:方法:判断文件是否存在

            6\时间(NSDate、NSDateFormatter、NSCalendarDate、NSCalendar)
                isEqualToDate:方法:比较是否相等
                compare:方法:比较时间
                calendarDate:方法:创建日历时间

            函数:  坐标.尺寸.与字符串相互转换
               
                结构体转字符串
                NSString *NSStringFromPoint(NSPoint aPoint);
                NSString *NSStringFromSize(NSSize aSize);
                NSString *NSStringFromRect(NSRect aRect);
                                
                字符串转结构体
                NSPoint NSPointFromString(NSString *aString);
                NSSize NSSizeFromString(NSString *aString);
                NSRect NSRectFromString(NSString *aString);




2 个回复

倒序浏览
原来是iOS的大神
回复 使用道具 举报
感谢分享,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马