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 - 分组名

原文地址:https://www.cnblogs.com/kqZhu/p/6876174.html