• ObjectC 学习笔记(IOS程序设计课程)01


     今年的秋季课程,我选修了IOS程序设计。虽然现在IOS编程都在主推用Swift语言,但是老师说起码这几年市面上90%+的APP还是用OC写的,因此上课的内容还是OC的相关知识。不过我们老师上课的速度有些快,OC的基础语法我还不怎么懂,于是去找了一些教程辅助学习,做了一些笔记,有空就上传到博客里和大家分享啦。不对的地方请大家指出哦~


    定义类:

    类的声明: (类名的每个单词的首字母大写)
    @interface 类名: NSObject
    {
             属性  (属性名一定要以下划线开头,规范)
                      (不允许在声明属性的时候对其初始化)
    }
    方法的声明
    @end

    类的实现:
    @implementation
         方法的实现
    @end

    对象的创建:
    类名 *对象名 = [ 类名  new ];

    如何使用对象:
    创建新对象   Person *p1 = [Person new];
    (1)如何访问对象属性:
         默认情况下,对象属性是不允许被外界直接访问的
         属性声明前加上@public 可以被外界访问
    (2)访问属性方式
         p1 -> name   或者   (*p1).name


    10月16日

    方法的声明实现调用:
    无参数的方法:
    (1)声明:
         a 位置  在@interface大括号之外
         b 语法: - (返回值类型)方法名称; 
                  -(void)run;
    (2)实现:复制放在@implementation中,将分号去掉,加大括号
    (3)调用:[对象名  方法名];

    带1个参数的方法:
    (1)声明:
         a 位置  
         b 语法:-(返回值类型)方法名:(形参类型)形参名称;
                      -(void)eat : (NSString * )foodname ;
                 注意:这个方法的名字叫做  eat:   (不要漏掉:)
    (2)实现
    (3)调用:[对象名  方法名:实参];
                   [ p1  eat:@"红烧排骨"];

    带多个参数的方法:
    (1)声明:
         a 位置  
         b 语法:-(返回值类型)方法名:(形参类型)形参名称1 : (形参类型)形参名称2 ;
                      - (int ) sum : ( int )num1 :( int )num2;
                注意:方法的名称是sum: : (注意是冒号+空格+冒号)
    (2)实现
    (3)调用:[对象名  方法名:实参1 :实参2 :实参3.....];
                        [ p1  sum:10 :20];

    总结:方法头中的数据类型都要用小括号括起来。


    带参数方法声明规范:
    (1)如果方法只有一个参数,那么方法名最好叫做 xxxWith 或者  xxxWithxxx 
            -(void)eatWith : (NSString * )foodname ;
    (2)如果方法有多个参数 ,建议写成
         方法名With : (参数类型)参数名称 and:(参数类型)参数名称 and:(参数类型)参数名称;
          - (int)sumWith : ( int )num1 and:( int )num2;
             注意方法名字为:sumWith : and:
             调用: [p1 sumWith :10 and :20];

    OC中的方法和C语言中函数的不同:
    ① 语法不同
    ② 定义位置不一样
    ③ OC中方法调用需要创建对象才能调用哦



    复习:1、OC在C的基础上
                   a  增加了面向对象的语法
                   b  将c语言复杂的语法封装的更加简单

    2、a、 #import 指令   无论import多少次,最终都只是包含1次
          b、 NSLog函数 
               ①自动换行
               ②会输出一些其他的调试信息
           c、 NSString 
              字符串常量前必须加一个@ 才是OC字符串
                NSString 只能存储OC字符串   NSString *str = @"jack";
           d、数据类型    BOOL   id   nil  SEL  block



    10月17日 

    1、内存中的五大区域    
            栈 (存储局部变量)
            堆  (手动申请的字节空间,使用  malloc  calloc  realloc函数)
            BSS段(未被初始化的全局变量、静态变量)
            数据段(常量区) 存放已经被初始化的全局变量  静态变量  常量数据
            代码段  存储代码

    2、类加载:在程序运行期间,当某个类   第一次  被访问到的时候,会将这个类存储到内存中的代码段区域,这个过程叫做类加载。直到程序运行结束的时候才会被释放。 


    10月18日

    1、Person *p1   会在栈内存中申请1块空间,声明一个Person类型的指针变量p1
    2、[Person new]    真正在内存中创建对象的其实是这句代码
                new做的事情:
                   a  在堆内存中申请1块合适大小的空间
                   b  在这个空间内根据类的模板创建对象
                        这个类模板中定义了声明属性,就把这些属性依次放在对象中
                        除了类模板中定义的属性,还有一个isa指针,指向对象所属的类在的代码段中的地址
                   c  初始化对象的属性
                        基本数据类型  赋值为0
                        C语言指针类型  赋值为NULL 
                        OC指针类型  赋值为nil
    3、注意:  对象中只有属性,没有方法的。对象中包含了定义的数学和isa指针,isa指向一个类对象,这个类对象包含了Objective-C对象的一些信息,包括方法调度表,实现了什么协议等等。那为什么对象中只有属性没有方法呢?是因为每一个对象的方法实现都是一模一样的,没有必要为每个对象都保存一个方法。



    10月20日

    1、NULL和nil    
         a、只能作为指针变量的值,代表这个指针不指向内存中的任何1块空间;NULL其实是一个宏,就是0  。NULL和nil其实是一样的
         b、建议 C指针用NULL,OC类指针用nil
         c、类指针为nil时,访问该指针指向的对象属性,会报错;但调用该指针指向的对象的方法,运行不会报错。

    2、分组导航标记

    可以从No Selection里面跳转到所需的代码段处
    (1)使用#pragma mark 分组名         
    (2)使用#pragma mark -             (形成分割线)
    (3)使用#pragma mark - 分组名

  • 相关阅读:
    【文章阅读】计算机体系-计算机将代码编译和持续运行过程中需要考虑的问题,以及具体的实现原理讲解
    JAVA性能调试+JProfiler使用相关
    【2016.10.30】王国保卫战-安卓汉化版
    【2017.01.05】装系统教程
    【2016.11.10】百度云离线下载迅雷链接
    mongodb 杂记
    缓存使用思路
    分布式 vs 集群
    切面 aop 笔记
    前端
  • 原文地址:https://www.cnblogs.com/kqZhu/p/6876174.html
Copyright © 2020-2023  润新知