
注:C#和java语法基本一致的,学会任何一种,向另外一种切换快的话仅需几天就可以上手。
Objective-C是非常“实际”的语言。它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反,ObjC写成的程序通常不会比其原始码大很多。而其库函数(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。 Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去作用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep),Apple在其Mac OS X 10.3中仍未引入这个功能。 另一个问题是ObjC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类别和函数均有“NS”作为前缀,例如NSObject或NSButton来清楚分辨它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。 虽然Objective-C是C的母集,但它也不视C的基本型别为第一级的对象。 和C++不同,Objective-C不支持运算子重载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。
@interface:标志类的开始
Bread:定义的类名
NSObject:被继承的父类
@end:标志类的结束
#import "Bread.h":导入该类的头文件,说明该实现文件实现的类的声明文件
@implementation:标志该实现文件实现的开始
Bread:指明被实现的类
@end:标志该实现文件的结束
类的头文件内在定义时声明了两个成员变量:字符型变量brand和flavor。因其默认读取权限为protected,即受保护的,其他地方若需访问这两个属性,必须通过其自身提供的set和get方法。
用于记录每个变量的状态,例如分组列表每个分组的开关状态。
属性变量无需像成员变量一样必须先手动实现其set和get方法,属性变量声明以后即可调用。
属性变量自动实现的内容:
①自动生成一个对应的成员变量,变量名为属性变量名前加下划线"_"。
②自动提供了对应的set方法:set*和get方法:*
*set方法变量名数字母大写;get方法方法名即变量名,无get是为了与系统其他方法名区分开。
③提供了set和get方法的具体实现。
*属性变量中的self指代调用者,即谁调用,self就指代谁。
绝大多数情况均使用属性变量
导入被实例化的类的头文件-->Bread *bd来接收[Bread new]的对象
[Bread alloc]实例化并分配内存空间
[Bread init]实例化并对内存空间初始化
*使用new只能默认init进行初始化,alloc方式可以使用其它的init开头的方法进行初始化。
*默认的init方法中 , 什么都没有做,直接返回了self , 所以,如果没有重写init的话, [Class alloc] 和 [[Class alloc]init] 是等价的.其中alloc为类方法,init为实例方法。
单参数方法
-:表明该方法为实例方法,该方法必须再该类实例化为对象以后才可以调用。
void:表明该方法不返回返回值。返回值只能为单一对象,一个字符,一个数组等。
setBrand:构造的方法的方法名。
NSString *:表明方法参数的类型。
aBrand:传入的参数在方法内的别名。
多参数方法
andFlavor:标签,其作用是解释下一个参数的含义和使方法名更连贯更通俗易懂。
其他部分与单参数方法相同。
函数前缀与声明部分相同,该方法的作用是将外部传来的参数aBrand和aFlavor赋值给该类的成员变量brand和flavor以及将自身的这两个成员变量通过方法返回值的形式传递给外部。达到外部对该类成员变量的存取 *** 作。
bd4:调用方法的具体对象。
brand:用于接收方法的返回值。
达利园/蒜泥味:调用方法时传递的参数。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)