﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-咖啡伴侣-随笔分类-ObjectC</title><link>http://www.blogjava.net/oathleo/category/53348.html</link><description>呆在上海</description><language>zh-cn</language><lastBuildDate>Tue, 26 Feb 2013 02:34:39 GMT</lastBuildDate><pubDate>Tue, 26 Feb 2013 02:34:39 GMT</pubDate><ttl>60</ttl><item><title>Object C 入门1</title><link>http://www.blogjava.net/oathleo/archive/2013/02/26/395725.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Tue, 26 Feb 2013 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2013/02/26/395725.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/395725.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2013/02/26/395725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/395725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/395725.html</trackback:ping><description><![CDATA[<h1><a id="cb_post_title_url" href="http://www.cnblogs.com/missna/archive/2010/10/26/1861748.html" style="margin: 0px; padding: 0px; color: #075db3; text-decoration: none;">Objective-C 类声明，定义，实例，初始化</a></h1><div style="margin: 0px; clear: both; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; background-color: #fefef2;"></div><div style="margin: 5px 0px 0px; padding: 5px 2px 5px 5px; line-height: 1.5; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;"><div id="cnblogs_post_body" style="margin: 0px; word-break: normal !important;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">Objective-C中，调用方法被称为<strong style="margin: 0px; padding: 0px;">发送消息</strong>&nbsp;，通知对象执行某种操作。语法如下：<strong style="margin: 0px; padding: 0px;">[shape draw]</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">一、类声明（接口）：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">@interface TestCoop : NSObject {<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp; &nbsp;int iMonth;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp; &nbsp;int iYear;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp; &nbsp;int iDay;<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">- (void) setYear: (int) iYear;<br style="margin: 0px; padding: 0px;" />- (void) primalSetData: (int)iYear :(int)iMonth :(int)iDay;<br style="margin: 0px; padding: 0px;" />- (void) setData: (int)Year iMonth:(int)iMonth iDay:(int)iDay;<br style="margin: 0px; padding: 0px;" />- (void) displayDateInfo;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">@end</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">1、前面的<strong style="margin: 0px; padding: 0px;">短线/-</strong>&nbsp;表示这是Objective-C方法的声明，用来区分函数原型（C语言中）与（Objective&#8212;C中）方法声明的方式。短线后面是方法的<strong style="margin: 0px; padding: 0px;">返回类型/比如(<img src="file:///C:/DOCUME~1/li.min/LOCALS~1/Temp/moz-screenshot.png" alt="" style="margin: 0px; padding: 0px; border: 0px;" />&nbsp;void)</strong>&nbsp;，位于圆括号中。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">1.1 注意，方法的声明在括号后面，@end之前 {}区域里只有变量的定义，这点和C++很不一样。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">2、返回类型后面自然是函数名字，和C语言一样的，不同的是参数声明方法</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">2.1、无参数的函数后面不需要加括号和冒号，直接是函数名结束加分号，比如：&nbsp;<strong style="margin: 0px; padding: 0px;">- (void) displayDateInfo;</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">2.2、有参数的后面加冒号和参数类型名字，比如：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">- (void) setDay: (int) iDay; //单个参数<br style="margin: 0px; padding: 0px;" />- (void) primalSetData: (int)iYear :(int)iMonth :(int)iDay;//多个参数</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">objective还提供一种中缀符的语法，方法的名称和参数都是和在一起的：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">参数前面多加一个标识符，通常和变量名一样，如下：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">- (void) setData: (int)Year iMonth:(int)iMonth iDay:(int)iDay;//多个参数</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">苹果推荐使用第二种方法，虽然繁琐点。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">二、类实现：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">@implementation TestCoop<br style="margin: 0px; padding: 0px;" />- (void) displayDateInfo{<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; NSLog(@"Today is: %d.%d.%d\n", iYear, iMonth, iDay);<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">- (void) setYear: (int) year{<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iYear = year;<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">- (void) primalSetData: (int)year :(int)month :(int)day{<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iYear = year;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iMonth = month;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iDay = day;&nbsp;&nbsp;&nbsp;&nbsp;<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">- (void) setData: (int)year iMonth:(int)month iDay:(int)day{<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iYear = year;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iMonth = month;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iDay = day;<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">1、注意：类的方法实现部分函数参数不能和声明部分一样，就是不能和类变量同名，否则会隐藏初始变量。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">比如：- (void) setYear: (int) year{ //right<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iYear = year;<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">改成和声明时一样的话，如下:- (void) setYear: (int) iYear{ //error<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; iYear = iYear;<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">明显出问题了，xcode编译会报warnging，就是初始变量被隐藏，其实本质就是变量作用域的问题，你局部变量和类变量名字一样，</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">当然访问不到了。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">根由：声明的时候Objective-C喜欢用类变量的名字来代替函数参数名，不知道为啥，真是个纠结的问题。（要是从声明的时候就不用，就OK了，也不用到定义时再去改，不知道苹果那样做的理由）。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">三、实例化对象</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">int main (int argc, const char * argv[]) {<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">&nbsp;&nbsp;&nbsp; // insert code here...<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; //NSLog(@"%d-,%s %@\n", 12, "hel123lo", @"123");<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp;&nbsp;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; TestCoop *ptest =&nbsp;<strong style="margin: 0px; padding: 0px;">[TestCoop new];</strong>&nbsp;<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; [ptest primalSetData :2009 :03 :05];<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; [ptest displayDateInfo];<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; [ptest setData:2010 iMonth:06 iDay:06];<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; [ptest displayDateInfo];<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; [ptest setYear:1987];<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; [ptest displayDateInfo];<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; [pool drain];<br style="margin: 0px; padding: 0px;" />&nbsp;&nbsp;&nbsp; return 0;<br style="margin: 0px; padding: 0px;" />}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">运行后会输出如下信息：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">Today is: 2009.3.5</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">Today is: 2010.6.6</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">Today is: 1987.6.6</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">通过向需要创建对象的类发送new消息，可以创建各个对象。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">然后向对象发送各种消息来操作对象。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">//类的初始化</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">不过，cocoa习惯使用alloc和init来创建对象，而不是new</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">使用alloc来分配内存，并使用init来初始化，会将这块内存全部清0，bool型为NO，int型为0，指针为nil</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">上面的创建对象代码改成如下：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">TestCoop *ptest = [[TestCoop alloc] init];</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 1.5;">&nbsp;</p></div></div><img src ="http://www.blogjava.net/oathleo/aggbug/395725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2013-02-26 10:30 <a href="http://www.blogjava.net/oathleo/archive/2013/02/26/395725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>