黑马程序员——Objective-c特性
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特性的更多相关文章
- 黑马程序员:Java基础总结----JavaBean 内省
		
黑马程序员:Java基础总结 JavaBean 内省 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean 内省 软件包 java.beans 包含与开 ...
 - 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具
		
Java学习路线图引言: 黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...
 - 课程10:《黑马程序员_Hibernate开发资料》视频目录--没有细看
		
老师很厉害,讲得蛮详细的 \Hibernate视频教程\01_黑马程序员_Hibernate教程__Hibernate入门基础.avi; \Hibernate视频教程\02_黑马程序员_Hiberna ...
 - 移动端开发语言的未来的猜想#华为云·寻找黑马程序员#【华为云技术分享】
		
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
 - 黑马程序员面试宝典(Java)Beta6.0免费下载
		
场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...
 - 黑马程序员——【Java高新技术】——代理
		
---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...
 - 黑马程序员+SQL基础(上)
		
黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...
 - 黑马程序员+Winform基础(上)
		
黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...
 - 黑马程序员—C语言的函数、数组、字符串
		
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...
 - 黑马程序员:Java基础总结----泛型(高级)
		
黑马程序员:Java基础总结 泛型(高级) ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...
 
随机推荐
- 【资料分享】 OpenCV精华收藏
			
OpenCV精华收藏 SkySeraph Dec.29th 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified Dat ...
 - 破解版sublimeText3重新安装Package Control方法
			
我们都知道破解版的sublime是不能安装插件的,甚至连他的控制台都调用不出来,我也不知道这是为什么,但是,后来上网搜了很久,才发现,原来重新安装Package Control之后就可以的了.注意:因 ...
 - hibernate的三种状态(儿)
			
第五讲:hibernate的三种状态 瞬时:bean对象与session,与数据库无关.在session对象的save方法保存之前. 持久状态(托管):bean对象与session有关,数据库中有对应 ...
 - CodeForces 378C Maze (DFS)
			
题目链接 题意:给一个由“.”组成的联通区域,求再添加k个‘#'以后还是联通区域的方案. 分析:做题的时候犯二了,用DFS,一直搜到边缘,然后从边缘依次往回 回溯,回溯的过程中填充’#‘ 一直填充k个 ...
 - js如何判断一个对象是不是Array
			
typeof 操作符 对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时 var arr=new Array(&quo ...
 - 如何使用SQL Server链接服务器访问DB2 Server
			
首先,需要安装Microsoft OLE DB Provider for DB2 下载地址:http://download.microsoft.com/download/B/B/2/BB22098A- ...
 - Nginx安全配置
			
nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端.nginx一般是把请求发fastcgi管理进程处理,fastcgi管 ...
 - 学习java之利用泛型访问自己定义的类
			
如果有多个类,而且他们其中有一些方法是相同的,我是选择在每个类中都把这些方法实现一遍呢,还是选择泛型.我今天自己花了一点时间看了看泛型,实践了一下. Holder.java package regex ...
 - scala学习笔记(5)
			
偏应用函数 举个例子 def sum(a: Int, b: Int, c: Int) = a + b + c val a = sum _ println(a(1,2,3)) 实际发生的事情是这样的:名 ...
 - 凸优化简介 Convex Optimization Overview
			
最近的看的一些内容好多涉及到凸优化,没时间系统看了,简单的了解一下,凸优化的两个基本元素分别是凸函数与凸包 凸集 凸集定义如下: 也就是说在凸集内任取两点,其连线上的所有点仍在凸集之内. 凸函数 凸函 ...