关于面相对象于面相过程的区别:
C语言,面向过程性语言。
Objective-C则是,根据C语言所衍生出来的语言,
继承了C语言的特性,是扩展了C的面向对象语言。
面向过程是分析出解决问题所需要步骤,
通常可以当作是需要做什么,然后一步步实现,
使用的时候依次调用。自顶向下的编程。
面向对象是把构成问题事务分解成对象,
建立出对象目的不是为了完成某个步骤,
而是描述出某个事物在解决问题中的行为。
如果对于上面文字比较模煳,可以参考知乎上一个搞笑又内涵的答桉:
面向过程: 吃(狗,屎)
面向对象: 狗.吃(屎)
可以看出,面向过程强调的是『吃』,「狗」跟「屎」只是一个参数;
而面向对象则是,一个『狗』对象,有一个『吃』方法,参数「屎」;
—————————————————————-
一、对象
具有相同或相似性质的对象的抽象就是类。
因此,对象的抽象是类,类的具体化就是对象,
也可以说类的实例是对象。 对象也可以说就是一个物件。
简单来说,假设你有一只『狗』,而『狗』它就是一个对象。
再进一步说,这只『狗』是一直「(独特的)狗」,
那麽这只「(独特的)狗」就是一个实例。
再下来,『犬类』就是类的名称,
这个实例就是从该类创建的。
二、实例和方法
类的独特存在就是一个实例,对于实例执行的操作称之为方法。
还是以『狗』为例,狗的「吃」,「吃」可以作为实例方法。
另一个则是 类方法 。类方法是属于整个类,而不属于某个对象。
假设你有2只『狗』,其中1只执行了「吃」,这个时候「吃」这个方法影响了『狗』的温饱状态。
这也就是说:对象是类的独特表示,每个对象都包含一些通常对该对象来说的私有信息(数据)。方法提供访问和改变这些数据的手段。使用方法可以影响对象的状态。
三、Objective-C 类
下面将直接定义一个实际的类,以至于可以清晰的理解上面那堆字。
「对于不太会文字表达的我来说,其实上面写的好痛苦,感觉在写绕口令一样。」
—————————————————————-
相关项目,里面附带文字注解,以便理解
点击右侧进行下载_>:testProduct_2
1、在昨天项目中进行,新增1个类,Dog。
在项目目录点右键——New File… 或者使用快捷键【command + N】

关于.h和.m文件说明: .h为头文件,.m为Objective-C源文件
附带点其他的:
.c 学过C语言的同学都知道是C语言源文件
.cc \ .cpp 则是C++语言源文件
.mm 这里是适用于溷编,Objective-C++ 源文件
.pl perl 源文件
.o Object编译后文件
打开 Dog.h 关于
[objc] @interface Dog : NSObject [/objc]
_>此处 Dog 为 类名,建议类名以大写字母开头,方便其他人阅读你的代码
_>此处 NSObject 为 父类,这涉及到继承,后面会详细说明
打开 Dog.m ,将在@implementation Dog加入括号,并创建一个变量
[objc]
@implementation Dog{
NSString * foodStr;//名字
}
[/objc]
_>此处前面NSString 为变量类型,字符串,
_>此处foodStr,则是变量名。
关于变量名,命名规则:
1.字母和下划线_开头
2.之后可以任意大小写字母,下划线,数字组合。[注意OC有区分大小写]
【注意】: 编译器有保留字不可以用。如:int「一般为紫色字体」
4、下面将写一个类方法,打开Dog.h,加入以下代码:
[objc]
@interface Dog : NSObject
+ (NSString*) getObjectName;//加入代码
[/objc]
解释下这个方法。
_>首先方法开头的 + 加号,表示的是类方法。
类方法前面说过了,他不需要实例化,但他也不能访问实例变量。
_>接着括号内NSString,表示方法返回类型
_>getObjectName,表示方法名
_>最后 ; 分号 结尾
打开Dog.m,加入以下代码:
[objc]
+ (NSString*) getObjectName{
return @"Dog";//返回值,此处是NSString类型
}
[/objc]
打开main.m,加入以下代码:
[objc]
//输出 类方法 的返回值,这里可以看到类方法是不需要实例化。
NSLog(@"%@",[Dog getObjectName]);
[/objc]
这里来说下[Dog getObjectName],
_>括号左边一般是跟着类名或者类实例名称,这里的DOG,是类名
_>之后用一空格隔开,加入要执行方法,这里方法名是getObjectName
【注意】类方法不可以对成员变量进行存储,因为各成员变量均存放在具体对象所对应的内存中。
控制台输出如下:
[objc]
2014-03-10 09:46:18.803 testProduct[1094:303] Dog
[/objc]
5、实例方法,打开Dog.h,加入以下代码:
[objc]
/** 获取食物 */
– (void) getFood;
/** 设置食物 */
– (void) setFood : (NSString*) food;
[/objc]
_>开头的不同在于 – 减号,表示的是实力方法
_>void 表示不返回值
_>getFood 方法名
_>setFood方法后面带了 ‘:’,这是表示要插入参数,紧跟在 : 后面则是需要添加参数
_>(NSString*) food ,其中NSString 表示参数food的类型;
在这里稍微整理下,如何声明一个方法:
方法类型 (返回类型) 方法名 : (参数类型) 参数名;
如:- (void) setFood : (NSString*) food;
【方法类型】+ 为类方法 , – 为实例方法;可见上面是 实例方法;
【返回类型】void,则是不返回值
【方法名】 setFood
【参数类型】 NSString
【参数名】 food
如何声明带2个参数的方法:
方法类型 (返回类型) 方法名 : (参数类型一) 参数名一 : (参数类型二)参数名2;
如:- (void) setFood : (NSString*) food : (NSString*) food2;
【方法类型】+ 为类方法 , – 为实例方法;可见上面是 实例方法;
【返回类型】void,则是不返回值
【方法名】 setFood
【参数类型一】 NSString
【参数名一】 food
【参数类型二】 NSString
【参数名二】 food2
当然这样写是可以的,不过推荐最好是酱紫写:
方法类型 (返回类型) 方法名 : (参数类型一) 参数名一 参数名2描述 : (参数类型二)参数名2;
如:- (void) setFood : (NSString*) food andFood : (NSString*) food2;
【参数名2描述】andFood
回去继续写完这个2个实例方法。
打开Dog.m,加入以下代码:
[objc]
– (void) getFood{
//通常检索实例变量值的方法叫做取值方法[getter]
NSLog(@"%@",foodStr);//打印出之前设置值
}
– (void) setFood : (NSString*) food{
//通常设置实例变量值的方法称为设值方法[setter]
foodStr = food;//设置值
}
[/objc]
_>这里说下 = ,不是叫做等于号,是赋值的意思。
例如上面的,是food 赋值给 foodStr ,
而 等于号则是 == ,后面会在算数表达式上说的。
打开main.m,加入以下代码:
[objc]
// a 对象
Dog *a;
a = [Dog alloc];
a = [a init];
// b 对象
Dog *b = [[Dog alloc] init];
// c 对象
Dog *c = [Dog new];
//设置 food 参数
[a setFood:@"苹果"];
[b setFood:@"香蕉"];
[c setFood:@"梨子"];
//打印 food 参数
[a getFood];
[b getFood];
[c getFood];
[/objc]
先来看下 a 对象:
_>Dog *a; 意思则是:a是一个Dog类型的对象;关于 * 星号,表明对象的引用(指针)
此时 a 并没有存储数据,而是存储了一个内存地址,可以认为他是个盒子。
_>a = [Dog alloc]; 这里的alloc,则是分配新内存存储空间;
此时内存中会保留足够空间用于存储对象数据,包括实例变量的空间。
_>a = [a init]; 这里的init,用于初始化类的实例变量;
【注意】alloc 是分配新内存空间,其实真正对象始终没有被正确的初始化,所以需要init初始化对象。
接着看下 b 对象:
要说a对象和b对象写法上有点不一样,貌似是的,但又没啥不一样。
在一般情况,会用把alloc和init直接合并到声明行,进行简写,而简写后则是b对象那样。
最后看下 c 对象:
这里用的是new的方法,它可以将alloc和init的操作结合起来,
但是大部分情况下,貌似大家都比较偏向写[[类名 alloc] init];
回顾前面[Dog getObjectName],同样
_>上面说过了,括号左边一般是跟着类名或者类实例名称,同样这里的则是实例名称,如:a b c
_>之后用一空格隔开,加入要执行方法,这里方法名是 setFood:参数
再回顾之前的2参数情况:
如:- (void) setFood : (NSString*) food : (NSString*) food2;
则在调用方法如下 [a setFood:@”苹果” :@”香蕉”];
如:- (void) setFood : (NSString*) food andFood : (NSString*) food2;
则在调用方法如下 [a setFood:@”苹果” andFood:@”香蕉”];
好了,现在输出控制台,这一章就可以结束了。
[objc]
2014-03-10 09:46:18.803 testProduct[1094:303] 苹果
2014-03-10 09:46:18.804 testProduct[1094:303] 香蕉
2014-03-10 09:46:18.804 testProduct[1094:303] 梨子
[/objc]
由于以前一直没有写过这种类似教程的整理帖,
难免会让大家看着难受,或者看着看着不知所云。
就简单拿这章吧,写的时候很怕写错或者写漏什么,
所以从星期五写到这个星期一,汗颜呀。


atorvastatin 10mg without prescription order lipitor generic lipitor 40mg sale
order cipro 1000mg pills – augmentin where to buy order generic augmentin 375mg
ciprofloxacin 1000mg cost – order cephalexin 125mg pill buy clavulanate generic
buy ciplox 500mg online – order tindamax online buy erythromycin 500mg generic
purchase flagyl online – zithromax 500mg pills where to buy zithromax without a prescription
ivermectin 3 mg tablet – purchase sumycin generic tetracycline cost
purchase valacyclovir online – buy zovirax generic acyclovir 400mg tablet
buy acillin medication buy amoxicillin pills amoxil order
order flagyl 400mg sale – buy oxytetracycline zithromax medication
oral lasix 100mg – buy atacand 8mg generic captopril 25mg uk
glycomet usa – cipro for sale online buy lincomycin 500 mg without prescription
buy zidovudine sale – epivir drug brand zyloprim 300mg
order clozapine for sale – amaryl for sale online purchase famotidine
buy seroquel medication – buy trazodone 50mg sale purchase eskalith pill
buy clomipramine 50mg for sale – paroxetine 20mg us buy doxepin 25mg online
atarax 10mg uk – buy nortriptyline 25mg generic endep for sale online
augmentin 375mg generic – myambutol online order cheap ciprofloxacin 1000mg
buy amoxil for sale – order erythromycin 500mg generic cipro 500mg price
zithromax 500mg us – metronidazole us buy ciplox generic
buy generic clindamycin online – purchase chloramphenicol without prescription chloramphenicol without prescription
ivermectin 12 mg for humans for sale – buy cefaclor 250mg pills order cefaclor 500mg online
buy albuterol pills – theo-24 Cr 400 mg uk theo-24 Cr sale
order medrol online cheap – purchase cetirizine sale order astelin 10 ml online
order clarinex 5mg without prescription – purchase flixotide nasal spray buy albuterol sale
buy glyburide online – glyburide buy online forxiga 10 mg pill
buy metformin 1000mg for sale – order precose without prescription precose sale
pill prandin 1mg – jardiance brand jardiance 10mg brand
order semaglutide 14 mg online cheap – buy desmopressin online buy desmopressin online
buy generic terbinafine – buy diflucan generic generic grifulvin v
order ketoconazole for sale – purchase lotrisone cream order itraconazole 100 mg pill
purchase famvir – buy zovirax 400mg online valaciclovir online order
brand lanoxin 250 mg – cost irbesartan buy furosemide for sale
order metoprolol 100mg without prescription – order olmesartan pill adalat 30mg cost
brand microzide – order amlodipine online cheap how to get bisoprolol without a prescription
nitroglycerin online order – indapamide price buy valsartan 160mg generic
zocor limit – gemfibrozil afterward lipitor alone
rosuvastatin startle – caduet weave caduet pills swim
buy viagra professional aside – levitra oral jelly online heap levitra oral jelly sell
priligy moan – viagra plus thy cialis with dapoxetine willow
cenforce online terrorist – cialis online pharmacy brand viagra pills artist
brand cialis thirty – tadora game penisole straighten
brand cialis pirate – penisole wander penisole center
cialis soft tabs online idle – cialis oral jelly online church viagra oral jelly sharp
prostatitis medications flee – prostatitis treatment remind prostatitis medications chocolate
uti medication slam – uti medication lip treatment for uti rustle
claritin waste – claritin pills number loratadine medication research
valacyclovir pills after – valtrex pills evident valacyclovir master
dapoxetine agent – dapoxetine bag priligy know
claritin often – claritin pills hall claritin pills yawn
ascorbic acid field – ascorbic acid play ascorbic acid treasure
promethazine marvel – promethazine heavy promethazine fortune
biaxin pills next – cytotec back cytotec jacket
fludrocortisone pills behind – prevacid preparation lansoprazole pills bug
order aciphex online – motilium buy online buy domperidone 10mg pills
dulcolax 5mg generic – cost imodium buy generic liv52 20mg
zovirax brand – cheap cerazette buy cheap dydrogesterone
bactrim online order – purchase tobrex generic tobra 10mg canada
buy fulvicin sale – buy griseofulvin sale buy lopid medication
buy generic forxiga – purchase sinequan without prescription buy acarbose 50mg for sale
buy dimenhydrinate without prescription – order dimenhydrinate 50mg pills order actonel 35mg generic
nootropil pills – sinemet 10mg usa sinemet order online
hydroxyurea cost – buy generic pentoxifylline robaxin 500mg for sale
aldactone 100mg sale – aldactone 25mg cheap revia for sale online
order cyclophosphamide pills – buy atomoxetine for sale order vastarel online
cyclobenzaprine 15mg generic – cyclobenzaprine online buy order vasotec online
buy durex gel online cheap – order durex condoms buy latanoprost online
buy verapamil tablets – diltiazem canada buy tenoretic pill
tenormin 50mg for sale – buy generic clopidogrel 150mg buy generic coreg online
purchase atorlip sale – nebivolol 5mg price nebivolol pills
how to get gasex without a prescription – brand gasex buy diabecon generic
purchase lasuna for sale – himcolin where to buy order himcolin
buy generic noroxin for sale – buy generic noroxin order confido pill
purchase finax generic – uroxatral over the counter cost alfuzosin
buy speman generic – purchase finasteride generic cheap finasteride generic
order cyclosporine – colcrys 0.5mg usa colcrys 0.5mg brand