zoukankan      html  css  js  c++  java
  • OC-学习Tips

    (Objective-C)

      13,多参数方法:(函数名:f::)

      参数能够在 : 前面设置一个标签label,标签label也是函数名的一部分,方便阅读(不带标签实际上也有个匿名标签),第一个参数不能有标签,实际上函数名就是第一个参数的标签。

      14,OC不是严格的函数重载(和C++不同),主要看标签中,函数名和参数数量是否相同,不是看参数类型,如:

      - (int)g:(int)x;

      - (int)g:(flota)x;  //错误,方法冲突了

      - (int)g:(int)x:(int)y;  //正确,两个匿名标签

      - (int)g:(int)x andY:(int)y;  //正确,第二个标签为andY

      15,Message 消息机制(函数-消息-方法)

      发送消息:[obj message] 或 obj.message

      OC在.h文件中定义的所有函数都是public的,OC通过categories来实现函数私有化(或不在头文件中声明而去.m文件中直接实现)

      16,凡是以initXXXX开头的都是构造函数,如:

      - (id)init;

      - (Dog *)initWith;

      17,NSLog 和 printf 都会在console中输出显示结果,不同的是,前者传递进去的格式化字符是NSString的对象,而不是char * 这种字符串指针。

      18,OC中的类由接口和实现两部分组成:接口部分声明类中的实力变量和功能,接口部分实现接口中的功能。

      19,OC中,类的对象无法声明在栈中,只能声明在堆里。

      20,alloc / new ,一个对象在堆中开辟了空间,栈中有一个对象地址,先有类还是先有对象,看站的角度。

      21,类的封装,封装成员变量,成员方法,subclass基类

      22,构造方法:(类的封装)

      (1)在一般语言中,在创建对象时自动调用的方法称为构造方法。

      (2)在OC中,方式用init开头的成员方法都是构造方法。

      构造方法一般用于对象的初始化, 无参的构造方法返回值是当前对象的地址。

      23,构造函数和析构函数

      构造函数一般以initWithXXXX开头-初始化。

      析构函数dealloc:对象从内存中销毁前调用的函数。

      构造方法:

      - (id)init {

        if (self = [super init]) {

          //_FUNCTION_当前函数本身

        }

        return self;

      }

      - (void)dealloc {

        NSLog(@"name:%@ release",_name);

        [super dealloc];

      } //在对象完全消失的时候调用,对象销毁时,对象计数器=0。

       //不要人为的调用[xxx dealloc],应该用release销毁[xxx release],release使对象计数器-1,减到0,就会自动调用dealloc函数

      - (void)initialize; //类第一次实例化时调用,只调用一次

      24,self指针(super)(Java中的this、super):指向当前对象的指针,"+"类方法直接用类名调用(静态方法)

      25,类方法不能访问成员变量,类方法不能调用对象的方法。

      26,静态变量(全局、局部)

      未初始化前默认为0,作用域为当前文件,在全局数据区分配。

      静态函数:不能被其他文件所用,其他文件可以定义相同的函数名而不冲突。

      27,点语法  是编译器级别:

      dog.age = 200;  <=>  [dog setAge:200]; 

      int dogAge = dog.age;  -<=>  int dogAge = [dog age]; //具体调用了哪个方法编译器会自动判断

      28,@property int age  <=>  - (void)setAge:(int)newAge;- (int)age;   // .h文件中的声明

         @synthesize  <=>  - (void)setAge:(int)newAge{}  - (int)age{}   //.m文件中的实现

      29,age 与 self.age :在Dog类内部可以直接访问age变量,前者直接访问相当于访问age字段,后者是调用setter和getter函数。

      30,@property 参数(属性):readwrite(getter/setter,缺省),readonly(getter);

      assign(缺省),retain,copy -->表示属性如何存值;

      nonatomic -->表示考虑线程安全问题;

      getter=...;setter=...;,重置getter函数和setter函数。

      31,Category

      *** 实现继承之外的扩展方法的机制,只能扩展函数、消息,不能扩展字段、变量等。

      Category命名规范:要扩展类名+,扩展变量.[hm]

      比如:NSString+ReverseString.h    NSString+ReverseString.m

      -----

  • 相关阅读:
    遗传算法(Genetic Algorithm, GA)及MATLAB实现
    CCF CSP 201809-2 买菜
    PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
    PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
    PAT (Basic Level) Practice (中文)1004 成绩排名 (20 分)
    PAT (Basic Level) Practice (中文)1002 写出这个数 (20 分)
    PAT (Advanced Level) Practice 1001 A+B Format (20 分)
    BP神经网络(原理及MATLAB实现)
    问题 1676: 算法2-8~2-11:链表的基本操作
    问题 1744: 畅通工程 (并查集)
  • 原文地址:https://www.cnblogs.com/arlenliu/p/5043459.html
Copyright © 2011-2022 走看看