您的位置:首页 > 移动开发 > IOS开发

iOS基础学习总结(OC基础总结)

2016-08-05 10:36 489 查看

Object-C基础总结

1.OC基本语法

1.手动编译链接的方法:cc -c xx.m
      cc main.o - framework Foundation

2.实际上BOOL类型的变量:是1个有符号的char变量.

3.面向过程与面向对象:

        面向过程:在遇到1个需求的时候,实现这个需求的每1个步骤都是自己写代码亲自的去一步步的实现.这样的解决问题的方式我们就叫做面向过程的方式.
        面向对象:在遇到1个需求的时候,不要亲自去实现而是找1个专门做这件事情的人来帮助我们搞定.这样的解决问题的方式就叫做面向对象的解决方式.

        面向对象的解决问题的优点:后期的维护和修改十分方便.

4. 对象:对象是现实生活中的1个具体存在.看得见、摸的着.拿过来就可以直接使用.
        类:类是对一群具有相同特征或者行为的事物的1个统称.抽象的.不能直接使用.

5.内存中的五大区域.
        栈 存储局部变量.
        堆 程序员手动申请的字节空间 malloc calloc realloc函数.
         BSS段存储未被初始化的全局变量静态变量.
         数据段(常量区)存储已被初始化的全局静态变量常量数据.
        代码段存储代码.存储程序的代码.
6.类加载:在程序运行期间当某个类第1次被访问到的时候.会将这个类存储到内存中的代码段区域.这个过程叫做类加载.
7.分组导航标记:        #pragma mark分组名
        #pragma mark -          #pragma mark -分组名

8.数据类型:是在内存中开辟空间的1个模板.

2.封装

1.NSString最常用的类方法和对象方法

        + (instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;
        + (instancetype)stringWithFormat:(NSString *)format
        length方法 
        - (unichar)characterAtIndex:(NSUInteger)index;得到字符串中指定下标的字符.
        - (BOOL)isEqualToString:(NSString *)aString;判断相等的方式.
        - (NSComparisonResult)compare:(NSString *)string;比较字符串的大小.
2.匿名对象:如果我们创建1个对象,没有用1个指针存储这个对象的地址.也就是没有任何指针指向这个对象那么这个对象就叫做匿名对象。
3.对象与对象之间的关系. 组合关系 依赖关系 关联关系 继承关系

3.继承与多态

1.OC中的static关键字.

        a. static不能修饰属性也不能修饰方法.

        b. static可以修饰方法中的局部变量.

2.Super只能访问方法,不能访问属性。

3.里氏替换原则 --- LSP

                子类可以替换父类的位置.并且程序的功能不受影响.
4.多态:指的是同1个行为,对于不同的事物具有完全不同的表现形式.

4.OC特有语法

1.取到存储方法的SEL对象,SEL s1 = @selector(方法名);

2.内部的原理:
      1).先拿到存储sayHi方法的SEL对象,也就是拿到存储sayHi方法的SEL数据.
SEL消息.
      2).将这个SEL消息发送给p1对象.
      3).这个时候,p1对象接收到这个SEL消息以后就知道要调用方法
      4).根据对象的isa指针找到存储类的类对象.
      5).找到这个类对象以后在这个类对象中去搜寻是否有和传入的SEL数据相匹配的.
         如果有就执行 如果没有再找父类直到NSObject

3.动态类型检测判断

        1).判断对象中是否有这个方法可以执行.

                 
- (BOOL)respondsToSelector:(SEL)aSelector;最常用的是这个方法. 

        2).判断类中是否有指定的类方法.

                  + (BOOL)instancesRespondToSelector:(SEL)aSelector;

        3).判断指定的对象是否为
指定类的对象或者子类对象.
                   - (BOOL)isKindOfClass:(Class)aClass;

                 
BOOL b1 = [s1 isKindOfClass:[Person class]]; 判断s1对象是否为Person对象或者Person的子类对象.

4).
判断对象是否为指定类的对象 不包括子类.

               
- (BOOL)isMemberOfClass:(Class)aClass;
                [s1 isMemberOfClass:[Student class]];
                判断s1对象是否为1个Student对象.不包括Student的子类对象.

  5).判断类是否为另外1个类的子类.
               + (BOOL)isSubclassOfClass:(Class)aClass;
4.无论如何,记住重写init方法的规范.
     - (instancetype)init
     {
         if(self = [super init])
         {
            //初始化当前类的属性的代码;
         }
         retrun self;
     }

5.内存管理

1.  内存管理的原则
        1).
有对象的创建,就要匹配1个release

        2). retain的次数和release的次数要匹配.

        3).谁用谁retain.
谁不用谁release. 谁负责retain谁就负责relase

        4).只有在多1个用户用的时候才retain少1个用户使用的时候才release

2.野指针

        C语言中的野指针:定义1个指针变量.没有初始化.这个指针变量的值是1个垃圾值,指向1块随机的空间.这个指针就叫做野指针.

        OC中的野指针:指针指向的对象已经被回收了.这样的指针就叫做野指针.

3.在MRC的开发模式下.1个类的属性如果是1个OC对象类型的.那么这个属性的setter方法就应该按照下面的格式写.
     - (void)setCar:(Car *)car
     {
         if(_car != car)
         {
            [_car release];
            _car = [car retain];
         }
     } 
    还要重写dealloc方法.
     - (void)dealloc
     {
        [_car release];
        [super delloc];
     }
4.  在ARC机制下.当对象被回收的时候.原来指向这个对象的弱指针会被自动设置为nil
5.  @property的参数

                atomic   nonatomic    retain     assign     strong     weak     readonly readwrite
   setter getter
6.  使用命令使ARC MRC兼容      使用命令.  -fno-objc-arc

5.分类 延展 协议

1. 分类只能增加方法,不能增加属性。
2.  本类中的真私有属性在分类中无法直接访问.
3.  为系统自带的类写分类这个就叫做非正式协议.
4.  分类的作用
        1).将臃肿的类分为多个模块方便管理.
        2).扩展1个类.

5.  延展 
        分类中只能新增方法.而延展中任意的成员都可以写.

        分类中可以写@property但是只会生成getter setter的声明. 延展中写@property会自动生成私有属性也会生成getter
setter的声明和实现.

6.  延展天生就是来私有化类的成员的.
        如果类的成员只希望在类的内部访问,那么就将其定义在延展中.
        如果类的成员允许被外界访问定义在本类的@interface中.

7.  block代码块

             int (^myBlock3)(int num1,int num2);
8.  block的实现
            int (^myBlock3)(int num1,int num2) =  ^int(int num1,int num2){
                     int num3= num1 + num2;
                     return num3;
                 };

9.  协议protocol
        作用: 
           1).专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明).
           2).只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法声明.而不用自己去定义.
10.  @required 与 @optional   修饰协议方法是否必须实现

11.  什么是代理模式.
        传入的对象,代替当前类完成了某个功能,称为代理模式.

12.  利用协议实现代理模式的主要思路.
        1).定义1个协议.里面声明代理类需要实现的方法列表.比如这里的1个代理类需要实现wash
cook方法.
        2).创建1个代理类(比如猪猪)遵守上面的代理协议并实现方法
        3).在需要代理的类中,定义1个对象属性类型为id且遵守代理协议的属性.
        4).在代理的类中,调用代理对象的方法.

6.Foundation框架的常用类与方法

1.NSString的方法

1. - (BOOL)writeToFile 字符串写入文件

2. + (instancetype)stringWithContentsOfFile  从文件读取字符串

3. 把路径包含到URL中 NSURL *url = [NSURL URLWithString:@"xxxxxx"];

        + (instancetype)stringWithContentsOfURL:  通过URL读取文件中的数据

4. - (BOOL)writeToURL: 写入到URL指向的文件

5. - (NSComparisonResult)compare:(NSString*)string 字符串比较  返回一个枚举类型   -1 0 1   其中NSOrderedAscending = 1    可以加参数来指定忽略大小写
6. - (BOOL)isEqualToString: 判断字符串是否相等
7. - (BOOL)hasPrefix
    - (BOOL)hasSuffix  判断字符串是否以指定的字符开头或结尾
8. - (NSRange)rangeOfString:(NSString*)String 在字符串中搜索子串
9.字符串的截取:
        -(NSString*)substringFromIndex:
        -(NSString*)substringToIndex:
        -(NSString*)substringWithRange:range
10:获取指定下标字符:-(unichar)characterAtIndex:index
11.字符串转化为其他数据类型:string.intValue    string.doubleValue
12.将OC字符串转化为C字符串  char *str1 = str.UTF8String;
     将C转化为OC   +(instencetype)stringWithUTF8String:str1

2.关于NSRange CGPoint  CGSize  CGRect 

1.NSRange range = [NSRange NSMakeRange(3,7)];   创造一个range结构体变量并初始化

2.NSStringFromRange(range)   将一个结构体变成字符串输出

3.CGPointMake   CGRectMake   CGSizeMake

3.NSMutableString 的方法

1.-(void)appendString:   添加字符串
2.-(void)appendFormat:  拼接方式添加字符串

4.NSArray的方法

1.+(instancetype)arrayWithObjects:.....nil;    创建一个NSArray数组
2.-(id)objectAtIndex:index   得到指定下标的元素
3.array.count   得到元素个数
4.-(BOOL)containsObject:(id)object    是否包含某个对象
5.-(NSUInteger)indexOfObject:(id)anObject    查找某个元素第一次在数组中出现的位置
6.  NSArray *arr = @[a,b,c,d];    简要初始化
7.-(void)enumerateObjectsUsingBlock:.....    代码块遍历数组
8.将数组连成字符串: -(NSString*)componentsJoinedByString
9.将字符串以指定符号分隔成一个数组  -(NSArray*)componentsSeparatedByString:@"#"

5.NSMutableArray的方法

1.-(void)addObject:
2.-(void)addObjectsFromArray
3.指定下标插入  -(void)insertObject:xxx   atIndex:xx
4.删除指定下标  -(void)removeObjectAtIndex:index
5.删除指定值元素  -(void)removeObject:object;
6.删除指定范围内元素  -(void)removeObject:    inRange:

6.NSDictionary的方法

1.[NSDictionary dictionaryWithObjectsAndKeys:a,keys,b,key,c,keyc,nil];
2.NSDictionary *dic = @{keya:a,keyb:b,keyc:c};
3.     .count  键值对的个数
4.根据键取到值:-(id)objectForKey:key
5.遍历也可以用block
enumerateKeysAndObjectsUsingBlock:

7.NSMutableDictionary的方法

1.增加键值对   setObject:xx  forKey:xx
2.删除指定键 键值对 :removeObjectForKey:xx

8.NSDate方法

1.格式化日期输出
        NSDate *date = [NSDate new];
        NSDateFormatter *fom = [NSDateFormatter new];
        fom.dateFormat = @"yyyy-MM-dd HH:mm:ss";
        NSString *str = [fom stringFromDate:date];

2.将格式化输出的字符串转化为NSDate
        NSDateFormatter *fom = [NSDateFormatter new];
        fom.dateFormatter = @"yyyy-MM-dd HH:mm:ss";
        NSDate *date = [fom dateFromString:str];
3.计算两时间之差
        timeIntervalSinceDate:xxx  
4.得到时间的各个部分可以使用日历对象NSCalendar

7.NSFileManager相关

1.单例模式   NSFileManage *mng = [NSFileManager defaultManager];

2.打开文件时         先判断是否存在 fileExistsAtPath:  isDirectory:

                                再判断是否有权限去读写 isWritableFileAtPath     isReadableFileAtPath    isDeletableFileAtPath

                                最后再去操作访问文件

3.获取信息的方法

        拿到文件的属性信息 attributesOfItemAtPath

        拿到所有子孙文件目录 subpathsAtPath

        拿到所有一级子目录 contentsOfDirectory

4.创建文件  creatFileAtPath

5.在指定目录创建文件夹   creatDirectoryAtPath

6.copy文件 copyItemAtPath:  toPath:

7.移动文件 moveItemAtPath: toPath:

8.删除文件 removeItemAtPath:  直接删除,不进废纸篓

8.Copy与单例补充

1.copy调用了copyWithZone 方法    此方法定义在NSCoping协议中。可以自己重写这个方法来自定义copy,要注意继承NSCoping

2.alloc方法内部调用了allocWithZone方法  可以通过重写allocWithZone来达到创建单例模式对象的目的,但要求提供类方法名,类方法名必须以shared或者default开头
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios