1. 继承 

Objective-c不支持多继承。 Super 关键字:调用该类的父类; 超类:父类的另一种说法。

2.自定义NSLog()输出: 
在类中添加description方法就可以自定义NSLog()如何输出对象。

#import <Foundation/Foundation.h>

@implementation Tire -(NSString *) description


   Return (@”I am a tire.”);

}

int Main()


    NSLog(@”%@”,tire[0]);

return 0;


       
3.Foundation kit: 
Cocoa是由两部分框架组成的:foundation kit [包括一些基础类]和 application kit.【包括用户接口对象和高级类】

创建字符串:

NSString *test; 
test=[NSString stringWithFormat:@"i'm %d years old!",23]; 
若在声明方法时在方法前面添加了加号,那就表示把这个方法定义为类方法【这个方法属于类对象,而不是类的实例对象。】 
NSArray类:可以存放任意类型的对象. 它有两个限制: 
1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。

2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】

创建NSArray:

NSArray *array; 
array=[NSArray arrayWithObjects:@"one",@"two",nil];

NSString, NSMutableString类; 
【NSString是不可变的,即一旦创建完成,就不能通过删除字符或添加字符的方式来改变它; 而NSMutableString是可变的。 
这两个类就像JAVA中的string与stringBuffer类的区别。】 NSArray, NSMutableArray类; NSEnumerator枚举;

NSEnumerator *emun; 
Emun=[array objectEnumerator]; Id thingie; 
While(thingie=[enumerator nextObject]){} 】 
NSDictionary:字典(关键字及其定义的集合。)【也成为散列表,关联数组】,NSMutableDictionary类; 
NSNumber:用来包装基本数据类型,如int ,char, float, bool;【将一个基本类型的数据包装成对象叫做装箱。】 
NSValue:它可以包装任何类,NSNumber是它的子类。 NSNull: 
 在cocoa中看到“CF”字样时,就表示它是苹果公司的Core Foundation 框架相关的内容。  NSAutoreleasePool:自动释放内存池。   
         
4.内存管理 
每个对象都有一个与之关联的引用计数(也叫保留计数) 
当使用alloc, new 方法或通过 copy消息(生成接收对象的一个副本)创建一个对象时,对象的引用计数值被设为1; 
 给对象发retain消息时,增加该值;  发送release消息时,减少该值; 
当一个对象的引用计数值变为0时,objective-c会自动向对象发送一条dealloc消息。销毁该对象。

你可以在自己的对象中重写该方法, 
使用retainCount消息,可以获取引用计数器的值。 -(id) retain; -(void) release; 
-(unsigned) retainCount;

自动释放池:autorelease pool; 创建: 
NSAutoreleasePool *pool; 
pool=[[NSAutoreleasePool alloc] init];

销毁: 
[pool release]; 
注意:xcode自动生成的代码,销毁pool池时,使用的是[pool drain],drain方法只是清空释放池,但不销毁pool.所以在自己编写代码时还是使用release. 
而且,drain只适用于MAC OS 10.4以上的版本,而release适用于所有版本。 
只有在向某个对象发送autorelease消息时,该对象才会添加到NSAutoreleasepool中,才会被自动释放。 
如:[car autorelease];

内存管理黄金准则:  
只有通过alloc, new和 copy方法创建的对象,才需要程序员负责向该对象发送release或autorelease消息。 
而通过其他方法获得的对象,则默认为已经被设置为自动释放,所以不需要程序员做任何操作了。 在objective-c 2.0中有垃圾回收机制, 如果要对某个项目使用垃圾回收: 
项目信息--build选项卡--查询"garb",出现“objective-c Garbage Collection”,将其值设置为“required[-fobjc-gc-only]” 
启用垃圾回收后,通常的内存管理命令全都变成了空操作指令,不执行任何操作。 开发iphone软件,不能使用垃圾回收。   
          
5.对象初始化 
两种创建新对象的方法: [类名 new] 、[[类名 alloc] init] 
这两种方法是等价的,但cocoa的惯例是使用后者。 alloc在为对象分配空间的同时,将这块内存初始化为0;

nit方法:初始化实例变量,使对象处于可用状态。[返回类型为id,  返回的值描述了被初始化的对象]

使用new创建新对象时,系统要完成两个步骤: 
1. 为对象分配内存,即对象获得一个用来存放其实例变量的内存块;

2.自动调用init方法,让该对象处于可用状态。     
      
6.objective-c 2.0的新特性【只适用于mac os x10.5及以上】 
@property :表示声明了对象的属性。【这样就不用再写属性的访问器了。】 (他有copy, retain, readwrite, readonly等属性)

@synthesize:表示“创建该属性的访问器” 点表达式     
      
7.类别(分类) 
分类(category)是一种为现有的类添加新方法的方式。

分类的声明: 
@interface NSString (NumberConvenience) //类名 (分类名)

-(NSNumber) lengthAsNumber;          //扩充方法声明

@end 
使用时使用原来的类名,就可以调用他的所有类别中的方法。

分类的局限性: 
1.不能向类中添加新的实例变量; 
2.在类别中的方法若与类中现有的方法重名,则类中的方法不可用,被类别中的新方法取代。

分类的作用: 
1.将类的实现分散到多个文件或框架中;

2. 创建对私有方法的前向引用; 
【Cocoa中没有真正的私有方法,则实现私有方法类似功能的方法为: 先在分类中声明方法;然后到现有类的实现中实现该方法。 
这样这个类中的其他方法可以使用该方法,而其他外部的类就不会知道该方法的存在了。】

3.向对象添加非正式协议。 
【创建一个NSObject的类别称为创建一个非正式协议。】

委托delegate是一种对象,另一个类的对象会要求委托对象执行它的某些操作。 受委托对象在某个时间(某个事件触发)时,会自动通知委托对象执行委托方法。

选择器:@selector():选择器只是一个方法名称,但它以objective-c运行时使用的特殊方式编码,以快速执行查询。圆括号中的内容是方法名。 
所以Car类的setEngine:方法的选择器是:@selector(setEngine: 
受委托对象如何知道其委托对象是否能处理它(受委托对象)发送给它(委托对象)的消息? 通过选择器,受委托对象先检查委托对象,询问其是否能响应该选择器。如果能,则向它发送消息。  
8.      
协议: 
正式协议是一个命名的方法列表。 
采用协议意味着必须实现该协议的所有方法。否则,编译器会发出警告。

声明协议: 
@protocal NSCopying 
-(id) copywithzone:(NSZone *) zone;

//方法列表

@end

采用协议: 
@interface Car:NSObject <NSCopying,NSCoding> //中括号中是要实现的协议列表

{

//实例变量列表

}

//方法列表

@end 
在objective-c 2.0中,有新特性:@optional, @required 
     
9.AppKit: 
创建APPKIT项目: 
File—new project—mac os—application—Cocoa application; IBOutlet与IBAction 
这两个都是APPKIT提供的#defines. IBOutlet没有任何作用,不会对它进行编译。 IBAction定义为void。 
这两个是为Interface Builder以及阅读代码的人提供的标记。

.xib文件一般称为.nib文件。 
.nib文件是包含被冻结对象的二进制文件。 而.xib文件是XML格式的nib文件。

http://www.itheima.com/

黑马程序员——Objective-c特性的更多相关文章

  1. 黑马程序员:Java基础总结----JavaBean 内省

    黑马程序员:Java基础总结 JavaBean 内省   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean  内省 软件包 java.beans 包含与开 ...

  2. 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具

        Java学习路线图引言:        黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...

  3. 课程10:《黑马程序员_Hibernate开发资料》视频目录--没有细看

    老师很厉害,讲得蛮详细的 \Hibernate视频教程\01_黑马程序员_Hibernate教程__Hibernate入门基础.avi; \Hibernate视频教程\02_黑马程序员_Hiberna ...

  4. 移动端开发语言的未来的猜想#华为云&#183;寻找黑马程序员#【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  5. 黑马程序员面试宝典(Java)Beta6.0免费下载

    场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...

  6. 黑马程序员——【Java高新技术】——代理

    ---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...

  7. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  8. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  9. 黑马程序员—C语言的函数、数组、字符串

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...

  10. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

随机推荐

  1. 如何使用通用Mapper

    集成方法请看上面的文档,集成后,可以继续阅读本页文档. 1. 继承通用的Mapper<T>,必须指定泛型<T> 例如下面的例子: public interface UserIn ...

  2. 共有19款Java 文件上传组件开源软件

    http://www.oschina.net/project/tag/139/fileupload?lang=19&sort=view

  3. Deeplearning原文作者Hinton代码注解

    [z]Deeplearning原文作者Hinton代码注解 跑Hinton最初代码时看到这篇注释文章,很少细心,待研究... 原文地址:>http://www.cnblogs.com/BeDPS ...

  4. hdoj - 5202 Rikka with string (BestCoder Round #37 ($))

    http://acm.hdu.edu.cn/showproblem.php?pid=5202 字符串处理的题,要细心. 给定一个只包含小写字母和问号的字符串,让我们还原出本来的字符串,把问号替换成任意 ...

  5. leetcode:Reverse Linked List

    Reverse a singly linked list. 代码如下: the iterative solution:(c++) /** * Definition for singly-linked ...

  6. in command-line: path> mvn eclipse:clean path> mvn -Dwtpversion=1.5 eclipse:eclipse path> mvn eclipse:eclipse in eclipse: Project / clean...

    原因:tomcat已经启动了 2007-10-9 12:26:16 org.apache.coyote.http11.Http11AprProtocol init严重: Error initializ ...

  7. string.Format 格式化时间,货币

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  8. how to check unsolved conflicts file list in git merge?

    how to check unsolved conflicts file list in git merge?

  9. Qt Assistant介绍

    简介 Qt Assistant也就是我们常说的Qt助手,是一款用于呈现在线文档的工具. 简介 一分钟学会使用 Qt参考文档 Qt Assistant详解 命令行选项 工具窗口 文档窗口 工具栏 菜单 ...

  10. POJ 1037 (计数 + DP) 一个美妙的栅栏

    这道题总算勉勉强强看懂了,DP和计数都很不好想 DP部分: 称i根木棒的合法方案集合为S(i),第二根木棒比第一根长的方案称作UP方案,反之叫做DOWN方案 C[i][k][DOWN] 是S(i)中以 ...