zoukankan      html  css  js  c++  java
  • objective-c学习笔记2

    Objective-c学习笔记

    1.cocoa的对象初始化一般使用alloc和init两个方法,不适用new,其中alloc用于分配内存,init用于初始化,因为初始化方法返回的对象可能和分配的对象不同,如下

    [[类名 alloc] init]

     

    2.初始化方法init的编写一般会用到super关键字,因为初始化对象之前必须先初始化父类,并检查父类的初始化是否成功,如下

    if(self = [super init]){dosomething}//这一句说明返回的不是nil,可以继续进行下去

    else return self;//返回的是nil,直接不用了

     

    3.mac的很多类都包含有便利初始化函数,调用这些初始化方法的时候请记得alloc

    [[类名 alloc] 便利初始化方法]

     

    4.OC2.0中引入了属性(@property),简化了代码的编写量,(感觉上类似于C#的自动存取方法)

    5.使用属性定义接口

    @interface

    {

    type1 var;

    type2 var2;

    }

    @property type1 var;

    @property type2 var2;

    @end

    6.使用属性定义的变量,可以通过编译器内部自动建立的存取方法来访问.

     

    7.在xcode4.5之前,使用@property定义之后,在对应的实现文件@implementation中要使用@synthesize申明一次相应的变量,4.5自后就不需要了

     

    8.如果一个变量能在子类中访问,那么在@interface中声明@property,并定义变量,如果不想子类访问,在@interface中只定义@property,不定义变量,在@implementation定义变量,如下

    @implementation

    {

    变量定义

    }

    @synthesize 变量

    @end

     

    9.点表达式在编译器中实际上是调用的属性访问方法,而不是直接访问的属性,点表达式出现在等号左边,则为写 右边,则为读

     

    10.通过@synthesize指令可以为使用@property的变量定义别名,例如外部导出name1,实际的变量是name2,那么@property声明name1,在@synthesize中定义 @synthesize name1 = name2

     

    11.可以定义变量的读写权限,使用@porperty定义的时候声明,例如

    @porperty (readwrite) type var

    @porperty (readonly) type var

     

    12.当使用@porperty声明了属性但是自己又不想用系统自动生成的方法的时候,使用@dynamic可以屏蔽系统自动生成的属性方法,转而自己定义

     

    13.使用@porperty 也可以为存取方法重命名

     

    14.为现有的类添加新的方法的办法叫做类别,定义方式为

    @interface 源类名(类别名)

    添加的新方法名

    @end

     

    15.类别只能添加新的方法,不能添加新的变量,同时类别有着名称冲突的隐患

     

    16.类扩展,类扩展是类别的一种特殊形式,类扩展只能放在类的相关文件中,.h .m,他可以扩展类的变量,还能修改类的访问属性,但是,类扩展是没有名字的,也就是说,类扩展只能供内部使用,这种方式可以很方便的维护代码

     

    17.类别可以实现源代码的分散管理,可以访问其继承的类的实例变量

     

    18.cocoa没有真正的私有方法,即使该对象没有声明该方法,只要实现中有就可以调用

     

    19.委托是指,一个对象由另一个类请求执行某些工作,比如有一个服务类,他有一个委托对象A,那么服务类会请求对象A是否去做某些工作

     

    20.委托对象只需要实现打算调用的方法

     

    21.被发送给委托对象的方法可以声明为NSObject的类别

     

    22.响应选择器 (没弄明白)

     

    23.正式的协议是包含有方法和属性的名称列表,必须显式的调用

    24.采用协议的办法是在类的interface中列出协议的名称,采用协议之后,类就要遵守该协议,采用协议意味着承诺实现该协议的所有方法

    25.协议声明使用@protocol关键字,如下

    @protocol 协议名称

    方法 定义

    @end

    26.协议可以继承,如下

     

    @protocol 协议名称<父协议名称>

    方法定义

    @end

     

    27.继承的协议被类使用的时候,类必须要实现父协议和子协议的全部方法,NSObject类符合NSObject协议,所以自己定的协议可以或者说最好是继承NSObject协议

     

    28.在类中采用协议使用<>,如下

    @interface 类名:父类名<协议1,协议2>

    @end

     

    29.objective-c的对象复制分为浅复制和深复制,其中浅复制只复制指针,深复制复制内容

     

    30.可以在使用的数据类型和方法参数中指定协议名称,如果是数据类型,那么这个数据的类应该符合指定的协议,如果是方法返回值,那么返回值的类也应该符合指定的协议如下

    -void function:(id<协议名称>)var;

     

    31.objectivec2.0中增加了两个新的特性,@option和@required,主要使用在协议的定义中,使用@optional定义的方法,类在使用协议的时候可以可选的实现,使用@required的方法,类在使用协议的时候必须实现

    32.委托,就是指一个类中包含一个委托对象,该委托对象必须实现一个指定的协议,类靠协议来约束委托对象的行为.

     

  • 相关阅读:
    element-ui+mongodb+express项目的实现(含源代码)
    Mybatis之逆向工程的文件和方法解析
    Mybatis之逆向工程的配置和实操
    ### The error may exist in com/online/dao/BlogMapper.java (best guess)
    ### Error opening session. Cause: java.lang.NullPointerException
    mongodb下载安装和基本操作
    SSM框架的具体搭建配置
    JSON字符串多了一个等号
    JSON使用变量值作为键名
    Ajax中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4582079.html
Copyright © 2011-2022 走看看