setobjectt-c get,set 要怎么重写

Posts - 152,
Articles - 0,
Comments - 1123
15:35 by 贺臣, ... 阅读,
  前面的学习都一直在使用Object C对象,但是没有具体总结过Object C中的对象使用特性,这里简单总结一下。
  一. &继承
    在面向对象编程中,子类可以通过继承得到父类的可以继承的的属性和方法,在Object C中也同样如此。
    先定义一个Person类,并且定义几个属性和一个方法:
#import &Foundation/Foundation.h&
@interface Person : NSObject{
NSString *
@property (nonatomic,retain) NSString *
@property (nonatomic,assign) int
@property (nonatomic,retain) NSArray *
Person类的定义
    在上面的代码中,Person类定义了三个属性name,age,items,对应的类型分别为NSString,int,NSArray. 其中还有一个方法write,返回值类型为void,没有输入参数。其具体描述内容如下:
#import "Person.h"
@implementation Person
@synthesize
@synthesize
@synthesize
-(void) write{
NSLog(@"%d",self.age);
NSLog(@"Person 对象调用write方法");
    在write方法中我们可以看到输出了age,并且输出一个字符串,这里又来标识具体调用哪个方法。
    再顶一个Student类,继承Person类,在Person类中定义一个属性address,为NSString类型,并且定义一个方法eat,返回值类型为void,没有输入参数,具体的代码如下:
#import &Foundation/Foundation.h&
#import "Person.h"
@interface Student : Person{
NSString *
@property (nonatomic,retain) NSString *
-------------------------------------------------------------------
#import "Student.h"
@implementation Student
@synthesize
-(void) eat{
NSLog(@"Student 调用eat方法");
    通过如上代码,Student就继承了Person类的属性和方法。
Person *person=[[Person alloc] init];
person.age=43;
[person write];
Student *student=[[Student alloc] init];
student.address=@"上海";
student.age=99;
[student eat];
[student write];
    输出如下结果:
2014-04-05 13:25:30.990 ObjectCApress[1659:303] 43
2014-04-05 13:25:30.992 ObjectCApress[1659:303] Person 对象调用write方法
2014-04-05 13:25:30.993 ObjectCApress[1659:303] Student 调用eat方法
2014-04-05 13:25:30.994 ObjectCApress[1659:303] 99
2014-04-05 13:25:30.995 ObjectCApress[1659:303] Person 对象调用write方法
    通过以上代码我们可以看出,Student继承了父类Person的属性和方法。
  二. 重写
    在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现.这个时候我们就需要重写父类方法,但是在Object C中重写和.NET中的重写有点区别,不需要使用特殊的关键字标识。
    在Object C重写父类方法,只需要重新实现该方法即可,代码如下:
#import &Foundation/Foundation.h&
#import "Person.h"
@interface Student : Person{
NSString *
@property (nonatomic,retain) NSString *
-------------------------------------------------
#import "Student.h"
@implementation Student
@synthesize
-(void) eat{
NSLog(@"Student 调用eat方法");
-(void) write{
NSLog(@"调用Student的Write方法");
重写父类方法
    在上面的代码中看出Student.m类中有一个write方法,其就是重写父类方法,不需要使用任何其他的修饰符。在上面的代码我们测试得到如果student类调用write 方法,其实是调用父类的方法,这里Student再调用write方法看看:
Student *student=[[Student alloc] init];
student.address=@"上海";
student.age=99;
[student eat];
[student write];
    输出结果如下:
2014-04-05 13:36:21.055 ObjectCApress[1698:303] Student 调用eat方法
2014-04-05 13:36:21.058 ObjectCApress[1698:303] 调用Student的Write方法
    结果输出"调用Student的write方法",说明这里不是调用的父类方法了
  三. 在子类调用父类方法
    在.NET中我们可以使用super关键字来调用,在在Object C中也可以使用super 来调用父类的方法。
-(void) write{
NSLog(@"调用Student的Write方法");
[super write];
    修改Student.m中的write方法,在这个方法中添加[super write] 语句用来调用父类的write方法。输出结果如下:
15:14:28.164 ObjectCApress[] Student 调用eat方法
15:14:28.167 ObjectCApress[] 调用Student的Write方法
15:14:28.168 ObjectCApress[
15:14:28.168 ObjectCApress[] Person 对象调用write方法
    同样使用以上代码来测试,得到如上输出的结果,从结果中我们可以看得出,使用super调用了父类方法。
  四. 重载
    .NET中重载就是方法名相同而输入参数不一样,在Object C中并没有重载。
-(void) eat(int a);
    我们尝试使用.NET的那种方式重载方法,如上代码,使用编译器编译报错,因为Object C中不支持方法的重载。Object-C 日记①-IOS-第七城市
Object-C 日记①
1、Xcode的.m扩展名表示文件含有Object-C代码,C以.c文件,C++以.cpp文件2、头文件声明:C使用:#include,O-C使用#import(当然你也可以使用#include)&3、输出方式:  C:printf("",参数);  O-C:NSLog(@"",参数);&4、布尔类型  C:bool 具有true、false值  O-C:BOOL具有YES、NO值&5、self vs super& ['sju:p?]adj. 特级的;极好的& n . 特级品,特大号;临时雇员&  当使用self调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;  当使用super时,则从父类的方法列表中开始找,再调用父类的这个方法,如果父类(超类)中没有定义则会在继承链中查找对应信息。    &oc基础教程:Object-C 提供某种方式重写方法,并且仍然调用超类的实现方式,当需要超类实现自身功能时需要使用super作为方法调用目标&  eg:Circle是子类(孩子类),Shape是父类(超类)    a、调用父类setFillColor    [shape setFillColor:kredColor]    首先在子类中搜索相应的方法如果找不到就在该对象的超类中查找,如果超类中没有即去NSObject中查找 如果还没有程序报错&&&&&&&&&&&&&&& & && &    b、请求超类代码[super setFillColor : c]& 下图是对方法setFillColor重写再调用超类中该方法,道理是一样    &    6、 Object-C中的nil和C语言的NULL相同:对象的指针指向空(没有东西就是空)  Object-C首字母大写的Nil和nil 不一样,Nil定义一个指向空的类(是Class,而不是对象),NULL只是一个值&7、@interface:在C#、Java等语言中类用class,Object-C用@interface创建类;创建一个文件会生成两个文件:.h,.m: 放在.h文件中  eg:@interface Tire:NSObject     @end  定义类Tire,继承自NSObject;NSObject后面的&{}&如果没有字段声明可以省略&8、@implementation [,implimen'tei??n]n. 实现;履行;安装启用 放在.m文件中  @implementation Tire  -(NSString *) description  {&& &  return (@"I am a tire, I last a while ");  }  @end看一个完整的例子(暂无mac 使用notepad++ vs GNUstep 如何配置单击这里)  #import &Foundation/Foundation.h&@interface Tire:NSObject@end@implementation Tire-(NSString *) description{
return (@"I am a tire, I last a while ");}@end@interface Engine:NSObject@end@implementation Engine-(NSString *) description{
return (@"I am an engine Vrooom!");}@end@interface Car:NSObject{
Tire *tire[4];}- (void)@end@implementation Car- (id) init{
//超类初始化要调用[super init] 注: init =initialization [i,ni??lai'zei??n, -li'z-]
if(self=[super init]){
engine=[Engine new];
tire[0]=[Tire new];
tire[1]=[Tire new];
tire[2]=[Tire new];
tire[3]=[Tire new];
return (self);}- (void) print{
NSLog(@"%@",engine);
NSLog(@"%@",tire[0]);
NSLog(@"%@",tire[1]);
NSLog(@"%@",tire[2]);
NSLog(@"%@",tire[3]);}@endint main(int argc,const char * argv[]){
car=[Car new];
[car print];
return(0);}7701人阅读
本站文章均为原创,转载务必在明显处注明:转载自&原文链接:&&本博客最新动态!及时将最新博文通知您!Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步到如下博文:本篇继续介绍另外一个在Cocos2dx中必经之路:在Cocos2dx中调用苹果Api以实现后期iOS的GameCenter和iap的相关操作,&那么Himi这里就跟大家简单分享探讨下;如何在Xcode中进行c++与oc混编吧~参考王哥说的&SimpleAudioEngine 类;首先Himi建立了两个类,一个object-c ,一个c++,详细如下:HSpriteOC.h1234567891011121314151617&#import &Foundation/Foundation.h&&NSString *@interface HSpriteOC&+(void) testL+(void) testLogWithStr:(NSString*)_+(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszT@endHSpriteOC.m12345678910111213141516171819202122232425262728293031323334&#import &HSpriteOC.h&&@implementation HSpriteOC&+(void) testLog{&&&&str = @&Himi-&string is: &;&&&&NSLog(@&HSprite: testLog&);}&+(void) testLogWithStr:(NSString*)_str{&&&&str = [NSString stringWithFormat:@&%@%@&,str,_str];&&&&NSLog(@&%@&,str);}&+(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle{&&&&&UIAlertView * messageBox = [[UIAlertView alloc] initWithTitle: pszTitle&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&message: pszMsg&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&delegate: nil&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cancelButtonTitle: @&OK&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&otherButtonTitles: nil];&&&&[messageBox autorelease];&&&&[messageBox show];}&@end这个类比较简单,简单定义了几个静态函数,打印和显示一个提示框,不赘述,大家大概看下就可以了;下面来看c++的类:HSpriteCPP.h123456789101112131415161718192021&#ifndef Oc_Cpp_HSprite_h#define Oc_Cpp_HSprite_h&#include &cocos2d.h&using namespace cocos2d;&class HSpriteCPP:public cocos2d::CCSprite {public:&&&&static HSpriteCPP* hspriteWithFile(const char *spName);&&&&void myInit();&&&&virtual ~HSpriteCPP();};#endifHSpriteCPP.cpp123456789101112131415161718192021222324252627282930313233343536373839404142#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)#include &HSpriteOC.h&#endif&#include &HSpriteCPP.h&&HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName){&&&&HSpriteCPP *pobSprite = new HSpriteCPP();&&&&&if (pobSprite && pobSprite-&initWithFile(spName))&&&&{&&&&&&&&pobSprite-&myInit();&&&&&&&&pobSprite-&autorelease();&&&&&&&&return pobS&&&&}&&&&CC_SAFE_DELETE(pobSprite);&&&&return NULL;} &void HSpriteCPP::myInit(){#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)&&&&&&&&[HSpriteOC testLog];&&&&[HSpriteOC testLogWithStr:@&wahaha&];&&&&[HSpriteOC hMessageBox:@&cocos2dx调用oc函数& title:@&Himi&];#else&&&&#endif&} &HSpriteCPP::~HSpriteCPP(){ &}此类是个自定义精灵类,都是简单的创建等函数,其HSprite.cpp类的导入和在 myInit() 自定义初始化函数中都加入了预编译(#if #else #endif 对预编译不太了解的自定百度下吧),主要为了区别当前手机设备的平台区分做处理;而且在myInit()中我使用了object-c语法进行调用之前OC写的HSprite类函数;其实通过观察以上两个类童鞋们估计很容易看出在xcode中cpp和oc如何混编;其实就是两点:1.&混编的类需要将其实现类(.cpp)改成(.mm)类,那么Xcode就会智能知道这个类混编类了,不用复杂的操作;2.&混编中cpp调用oc,其实就是各自使用各自语法即可,没差异!(最好对OC和c++都比较熟悉更效率)然后Himi在HelloWorldScene.cpp中加入以下测试代码:123HSpriteCPP * sp =HSpriteCPP::hspriteWithFile(&Icon.png&);&&&&sp-&setPosition(ccp(CCDirector::sharedDirector()-&getWinSize().width*0.5,CCDirector::sharedDirector()-&getWinSize().height*0.5-100));&&&&this-&addChild(sp);别忘记导入对应使用的类哦~OK,看运行效果:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1887368次
积分:17165
积分:17165
排名:第185名
原创:147篇
评论:2794条
移动开发专家,专注于移动开发领域,多年 J2me、Android、iOS 平台游戏开发经验;
CSDN、ITeye、51CTO、eoe-Android、泰然、中国移动开发者社区、微度网等多家技术论坛担任专家与版主;
? 【iOS】(高级群/超级群)
Cocos2d-x @Himi:
? 【Lua】(高级群)
Cocos2d-x-Lua @Himi:
? 【Unity3D】(超级群)
Unity3D @Himi:
文章:62篇
阅读:882120
文章:34篇
阅读:610694&&&&&&&&&&&&&&&&&&
posts - 222,comments - 15,trackbacks - 0
@Object-C中,public,protected,private用来控制继承类的访问权限,对于类成员的访问,并不能起到作用。而在C++,Java中,此三个描述符亦可以用来控制成员变量的访问权限。
@强类型和弱类型,强类型变量使用类名称,弱类型变量使用id代替,弱类型提供了在运行时更大的灵活性和动态性的功能,需要在机制上家以保证,这也是和静态类型的语言有差异的地方吧。
@在Object-C中,对象的引用叫做指针,需要记住在声明强类型对象的变量是加上*就可以了,弱类型id本身就是一个指针。可以声明两种类型的方法,尸体方法和类方法,实体方法是特定类的实例中可以执行的方法,类方法无需创建实例,当然也可在创建实例后使用。
@很奇葩的一种方法出现了,那天看的我好郁闷,现在懂了。一般来说,函数的声明包括返回类型,函数名和输入参数类型和名称组成,Object-C类似,只是在Object-C中,函数名和参数类型及名称可能是分开写的,例如函数insertObject:atIndex:
- (void) insertObject:(id)onObject atIndex:(NSUInteger)index
其中函数类型标识符(类方法或实例方法)为-,即实例方法;返回类型是void,函数名又称方法签名关键字,这里包括了insertObject和atIndex两部分,参数类型是id和NSUInteger,参数名称是anObject和index两部分。结构类似,只是表现形式不同,需要完成思维的转换。
上面的方法实际名称是:insertObject:atIndex:,即所有签名关键字的链接,冒号说明了当前的参数。
方法调用时,通过向对象通信,通信内容是方法签名和方法要求的参数信息。方法调用格式如下:
[myArray insertObject:anObject atIndex:0],中括号中,最左边是接受信息的对象,信息包括参数在右边,上面即表示发送信息insertobject:atindex:到变量名为myArray的对象中去。
为了避免多个局部变量来保存临时结果,Object-C允许你嵌套信息,来自每个嵌套信息中的返回值可以作为参数,目标或另一个信息,可以用信息代替前面例子中任意使用过的变量。从而,假如说有一个叫myAppObject的对象,他有访问数组对象和将对象嵌入数组的方法,可以将上述的例子写成下面这样:
[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0]
Object-C也提供句点来调用存取器方法,存取器获取和设置某一个对象的状态,典型的格式为-(type)propertyname和-(void)setPropertyName:(type)。使用句点语法,你可以将上述的例子重写成:
[[myAppObject.theArray] insertObject:[myAppObject objectToInsert] atIndex:0]
亦可以使用句点语法赋值,所谓存取器方法,自然包括两部分,存储和取出,如下所示:
myAppObject.theArray=aNewA
有没有发现越来越自然语言,赋值也可以写成:
[myAppObject setTheArray:aNewArray]
发消息时可以发给类实例或者类本身,相对应地也就需要指定方法是实例方法或者类方法。
类方法包括类实例创建,访问类共享信息,同实例方法声明唯一的不同就是-+号的区别。
使用类方法作为类的工厂方法,如下方法array是NSArray的类方法--继承自NSMutableArray-用于分配和初始化该类的新实例并将它返回到代码中区。
MSMutableArray *myArray=
//创建新数组并赋值给变量myArray
myArray= [NSMutableArray array];
.h文件是接口文件,包括interface和end,.m文件是实现文件,包括implementation和end。编译器通过这些信息,来实现定位相对应类的封闭方法。方法的声明要匹配借口文件中的说明,无需包含代码块的内容。
@property (readonly) UIView* rootV
@synthesize flag,nameObject,rootView
NSString提供对象封装字符串,可以具有所需要的所有缺点,为任意长度的字符串创建内存管理,支持多个格式化工具集,Object-C快捷创建NSString需要在普通的C字符串前加@符号。
NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];协议这里的协议如同一个借口,可以被任意类实现,其通过顶一个一个借口让其他对象可靠地实现,实现方法,即可说明符合协议了。协议类似借口,但是协议没有父类,并且不能定义尸体变量。Application通过委托获取了View,委托的实现来自于协议的要求,声明中则包含了View。
阅读(...) 评论()object-c怎么在线程中显示图片
[问题点数:100分,结帖人yunchao630]
object-c怎么在线程中显示图片
[问题点数:100分,结帖人yunchao630]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2014年8月 移动开发大版内专家分月排行榜第二
2014年12月 移动开发大版内专家分月排行榜第三
2014年8月 移动开发大版内专家分月排行榜第二
2014年12月 移动开发大版内专家分月排行榜第三
2014年10月 移动开发大版内专家分月排行榜第三
2014年10月 移动开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 resultset.getobject 的文章

 

随机推荐