oc笔记

//

//  main.m

//  oclearn

//

//  Created by SUMA on 15-7-18.

//  Copyright (c) 2015 SUMA. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "Students.h"

#import "Person.h"

#import "Property.h"

#import "Teahcer.h"

#import "RetainRelease.h"

#import "MemBetweenObj.h"

#import "CategoryStudent+Test.h"

#import "Button.h"

#import "ButtonListener.h"


typedef int(^MySum) (int,int);

void test(){

    int (^Sum)(int,int) = ^(int a,int b){

        return a+b;

    };

    int a = Sum(10,11);

    NSLog(@"%i",a);


}

void test2(){

    

    MySum sum = ^(int a,int b){

    

        return a+b;

    };

    NSLog(@"%i",sum(10,10));

}

void changeC(char *d){

    *d = 9;

}

#pragma mark 字符串导出

void stringExport(){


    NSString *str = @"123456我是字符串!!!!!!!!!!!";

    NSString *path = @"/Users/suma/Desktop/text.txt";

    NSString *error;

    //YES代表要进行原子性操作,也就是会创建一个中间临时文件

    //该方法当文件架不存在时会报错,但是当文件夹存在而文件不存在时会自动创建文件

    //编码不对的时候也会报错

    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];

    if (error) {

        NSLog(@"写入失败:%@",error );

    }else{

        NSLog(@"写入成功");

    }

}


#pragma mark 可变字符串的创建

void stringCreate(){

    

    NSMutableString *str = [[NSMutableString alloc]initWithCapacity:10];//10只不过是预先分配的10个字数的存储空间

    [str setString:@"1234"];

    //拼接一个字符串

    [str appendString:@"567"];

    //

    [str appendFormat:@"age is %i and height is %.2f",27,1.55f];

    //替换字符串

    [str replaceCharactersInRange:[str rangeOfString:@"age"] withString:@"no"];

    //插入字符串

    [str insertString:@"fuck you" atIndex:2];

    //删除字符串

    [str deleteCharactersInRange:[str rangeOfString:@"fuck you"]];

    NSLog(@"%@",str);

    

}


void arrayCreate(){


    //创建一个空的数组

    NSArray *array = [NSArray array];

    //创建有一个元素的数组

    [NSArray arrayWithObject:@"123"];

    

}

#pragma mark 字典的初始化

void dictCreate(){


    //NSDictionary是不可变的 类似与java 中的final

    NSDictionary *dict = [NSDictionary dictionary];

    

    

}


int main(int argc, const char * argv[]) {//C语言的main函数,混合编译

    @autoreleasepool {//

       

        

       

//        

//        35.OC1-OC概述.mp4

//

//        36.OC2-第一个OC程序.mp4

//

//        37.OC3-第一个OC的类.mp4

        /*

         // insert code here...

         //NSLog(@"Hello, World!");

         //NSLog(@"Hello, World!");

         //创建一个student对象,

         //1. 分配内存,调用一个静态方法来分配内存

         //暂时把id 当成是任何对象, oc中对象都带一个*,因为它是一门基于消息的动态语言,对象在内存中所以直接返回地址,java中其实也是指针

         Students *stu = [Students alloc];

         //2. 初始化  调用一个动态方法进行初始化

         //内存分配过程

         // stu ---> student对象

         stu = [stu init];//相当于stu指针给内存中Students对象发送一个init消息

         // Student *stu = [[Students alloc] init]

         //[stu release];

         [stu setAge:10 andNo:7];

         int age = [stu age];//get方法直接用属性名的

         int no = [stu no];//get方法直接用属性名的

         NSLog(@"Hello, World!%i,%i",age,no);

         */

        

//

//        38.OC4-点语法.mp4

//

       /* Person *person = [[ Person alloc]init];

        [person setAge:300];

        NSLog(@"age is %i",[person age]);

        person.age = 500;// person.age 等效与[person setAge:300] oc本身没有点语法,只不过编译器帮我们转换了

         NSLog(@"age is %i", person.age);//person.age 等效与[person age],点在等号左边是set方法,右边为get方法,所以以后写成员变量尽量写成_xxx的格式,这样就不会对点语法产生误解

        */

//        39.OC5-构造方法和description方法.mp4

            //Students *stu = [[Students alloc]initWithAge:20 andNo:30];//alloc是静态方法,init是动态方法

            /* NSLog(@"age is %i and no is %i",stu.age,stu.no);

                NSLog(@"%@",stu);///%@代表打印一个对象  默认会调用-(NSString *)description方法

                NSString *str = @"yzz";//oc中所有对象都要一个*表示

             */

        

//

//        40.OC6-self、自动释放、变量作用域.mp4

        

//

//        41.OC7-OC语法简单复习、new关键字.mp4

//

        //Students *stu = [Students new];//分配内存同时调用构造方法,但是只是调用 的默认的构造方法;

        

//        42.OC8-@property@synthesize.mp4   只是编译器的特性

        

        /*Property *propert = [[Property alloc] init];

        propert.age = 10;

        NSLog(@"the age is %i",propert.age);

        Teahcer *teacher = [[Teahcer alloc]init];

        teacher.age = 10;

        

        NSLog(@"age is %i",teacher.age);*/

//

//        43.OC9-内存管理1-retainrelease.mp4

        

        // 任何继承NSobject的对象,对基本数据类型无效

        //原理:每个对象内部都保存了一个与之相关联的整数,称为引用计数器

                // 当使用allocnew、或者copy创建一个对象时,对象的引用计数器被置为1

                //给对象发送一个retain消息,可以是引用计数器值+1

                // 当给对象发送一条release消息,可以使引用计数值-1

                //当一个对象的引用计数值为0时,那么它将被销毁,其占用的内存被系统回收,OC也会自动向对象发送一条dealloc消息。一般会重写dealloc方法。一定不要直接调用dealloc方法,系统会自动调用

                    注意可以通过对象有没有调用dealloc方法来判断他是否被回收

        

                //可以给对象发送retainCount消息获得当前的引用计数器值

                // javanew object() 如果没有对象引用他那么他会自动回收,而在oc[[NSobject alloc]init] 如果没有引用不会被回收 引用计数器一直为1也就是内存溢出

        

        //RetainRelease *retainRelease = [[RetainRelease alloc]init];

         //RetainRelease *retainRelease = [[[RetainRelease alloc]init]autorelease];延迟自动释放

        //[super release];//引用计数值零, alloc 一次release一次, 如果为零再次调用它会产生野指针错误,也就是访问了不属于你的内存

        // 只要调用了一次alloc或者retain都有责任release对象

        

        

//

//        44.OC10-内存管理2-set方法的内存管理.mp4  //对象之间的内存管理

        

        MemBetweenObj *mbook = [[MemBetweenObj alloc]init];

        //#pragma mark 测试方法 (为某一个方法注释)   #pragma mark - 测试方法  对一组方法分组

//

//        45.OC11-@class关键字.mp4

//

//        46.OC12-内存管理3-@property参数详解.mp4

//

//        47.OC13-内存管理4-autorelease.mp4

//

//        48.OC14-Category.mp4  分类语法   java中不存在    团队协作中没人写一个模块儿这样大家都不会冲突

        //OC提供了一种与众不同的方式Category,可以动态的为一家存在的类添加新的行为(仅限与方法)

        //这样可以保证类的原始设计规模较小,功能增加是在逐步扩展

        //使用Category对类进行扩展时,不需要创建子类

        //Category使用简单的方式,实现了类的相关方法的模块儿化,把不同的类方法分配到不同的分类文件中

        CategoryStudent *category = [[CategoryStudent alloc]init];

        category.test2;

        

        //使用场景:1. 在定义类时的某些情况下例如需求变更,你可能想要为其中的某个或几个类添加信的方法

        

                  // 2. 给系统自带类进行方法的拓展  比如给NSString 类扩充一个json字符串

                    // 3.一个类中包含了许多种不同种类的方法需要实现,儿这些方法需要不同的团队成员实现

        

//

//        49.OC15-Protocol.mp4   对应java里边的接口

        //简单来说就是一系列方法的列表,其中声明的方法可以被任何类实现。这种模式一般称为(delegation)模式

        //iOSOS X开发中,Apple采用了大量的代理模式来实现MVCView(UI控件)Controller(控件)的解耦

        Button *button = [[Button alloc]init];

        ButtonListener *buttonlistener = [[ButtonListener alloc]init];

        button.delegate = buttonlistener;

        [button click];

        

//

//        50.OC16-Block.mp4

        /*

         Block封装了一段代码,可以在任何时候执行

         Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blockinline(内联函数)的,并且默认情况下它对局部变量是只读的

         苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多

         

         block中可以访问外部定义的变量,但是默认情况下不可以修改,但是如果在申明的时候 __block  int  c = 15;就可以改变外部变量了

         */

        test2();

        

        //

//        51.OC17-ProtocolBlock、成员变量补充.mp4

        

        

        

//

//        52.Foundation1-常用结构体.mp4

        /*

         1. NSRange结构体 //通常用来表示事物的一个范围,通常是字符串里的字符范围或者集合里的元素范围

         2. NSPoint结构体 //处理UI界面,这个结构体代表的是平面中的一个点,UI界面设计的时候常会用到

         3. NSSize 结构体 //这个结构体用来存储高度和宽度

         4. NSRect

         

         

         */

//

//        53.Foundation2-NSString的创建.mp4

        /*

         

         NSString //不可变字符串

         

         */

//

//        54.Foundation3-指向指针的指针.mp4   //二级指针 **p

        char c = 10;

        changeC(&c);

        NSLog(@"the value of the c is %i",c);

        /*

         多级指针

         void chagenStr(NSString ****str2){  //四级指针

            ***str2 = @"123"

         }

         NSString *str = @"456";

         changeStr(&&&&str);

         */

        

        

//

//        55.Foundation4-NSString的导出.mp4   //写入文件

        // stringExport();

        

//

//        56.Foundation5-NSString的常用方法.mp4   //类似与java 中的不可变string

//

//        57.Foundation6-NSMutableString.mp4   //类似与StringBuffer StringBuilder 等可变的字符串   Mutable可变的

       // stringCreate();

        

        

//

//        58.Foundation7-NSArray的创建和遍历.mp4 //数组 类似与java中的list    不可变的

        /*

         

         */

//

//        59.Foundation8-NSArray的排序.mp4   //数组排序

//

//        60.Foundation9-NSMutableArray.mp4   //可变数组

//

//        61.Foundation10-NSDictonary.mp4      //字典  //类似java中的 hashmap中的字典

//

//        62.Foundation11-NSMutableDictonary.mp4  // 可变字典

//

//        63.Foundation12-NSNumber.mp4       //整形对象   类似与java 中的Integer 或者String等包装成对象

        //NSNumber 可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray NSDictionary等集合中

        

        

//

//        64.Foundation13-NSValue.mp4  //结构体不能直接放到数组中去

        //NSNumberNSValue的子类,但NSNumber只能包装数字类型,NSValue可以包装任意值,也就是可以用NSValue包装结构体后加入NSArray,NSDictionary等集合中

        

//

//        65.Foundation14-NSNull.mp4

        //集合中是不能存放nil值的,因为nil在集合中有特殊含义,但有时确实需要存储一个表示什么都没有的值,那么就可以使用NSNull,他也是NSObject的一个子类

        

//

//        66.Foundation15-NSDate.mp4        //日期

        //返回时间

//

//        67.Foundation16-NSObject和反射.mp4

        

        /*

         NSObject 常用方法

         -BOOLisKindOfClass:(Class)aClass //判断是否为aClass的实例或aClass的子类的实例

         -BOOLisMemberOfClass:(Class)aClass //判断是否为aClass的实例(不包括aClass的子类)

         

         */

//

//        68.OC18-copy语法.mp4           //oc设计copy语法的目的是在复制来的对象上修改而不影响原来的对象

        /*

         一个对象使用copymutableCopy方法可以创建对象的副本

         copy - 需要实现NSCopping协议,创建的时不可变副本(NSStringNSArrayNSDictionary)

         mutableCopy-需要实现NSMutableCopying协议,创建的时可变的副本(MutableStringMutableArrayMutableDictionary

         深复制:内容copy

         浅复制:指针copy

         只有不可变对象创建不可变副本才是前复制,其他都是深复制

         */

        

        

//

//        69.iOS基础1-iOS开发概述.mp4 

//

//        70.iOS基础2-iOS运行过程详解.mp4 

//

//        71.iOS基础3-第一个iOS程序:QQ登录界面.mp4

        

        

        

        

        //4.5.2 通过触摸背景关闭键盘

        //1. 创建点击背景时需要调用的方法, -(IBAction)backgroundTap:(id)sender{

                                    //[self.nameField resginFirstResponder];

                                    //[self.numberField resignFirstResponder];

                            //}

        

        


    }

    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值