名创优品加盟费的标签用什么打印的

Objective-C中类和方法的定义以及协议的使用
作者:芳草小脚丫
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Objective-C中类和方法的定义以及协议的使用,配合Mac下的Xcode IDE进行讲解,需要的朋友可以参考下
类和方法的定义
一般类都是继承NSObject,新建一个类时父类选择NSObject即可,oc只有单继承,没有多继承。
下面以一个简单的oc工程来讲解(需配置好Xcode工具以相应的SDK),会建工程的请直接跳到‘六'步骤。
一、新建一个oc编译环境,打开xcode-&File-&New-&Project(快捷键 command+shift+N)。
二、选择OS X--Application--Command Line Tool,选择next
三、填写项目名称(最好英文),你自己的名字,和公司的标志。Type选择Foundation,下面的勾表示是否选择ARC,建议初学者勾上。点击next
四、此时工程建好了,会看到一个main.m文件,所有的调用都在main.m中完成。
新建一个类,command+N,选择父类NSObject,取名people
五、点击next之后,出现以下界面,切记下面的√要打上。否则在编译时工程搜索不到此文件,会出现编译错误。
六、在people.h文件interface中添加变量,NSString为OC的字符串变量。
@interface Person : NSObject {
&&& NSString * _
然后在{}外面定义变量的初始化方法和set方法,格式:-(类型)方法名:(参数类型)参数1 参数名:(参数类型)参数2……,set方法名一般为set变量名,变量名首字母大写,此未苹果官方文档上的说明
-(void)setAge:(int)
-(void)setName:(NSString *)
定义变量的get方法,get方法名同样为get变量名
-(NSString *)
七、在people.m文件中实现people.h文件中声明的方法。
-(void)setAge:(int)age {
&&& _age =
-(void)setName:(NSString *)name {
&&& _name = [name copy];//copy方法涉及到oc的内存管理机制。使用copy可防止内存泄露
-(int)age {
&&& return _
-(NSString *)name {
&&& return _
七、在main.m中定义一个people类,并对其属性变量进行初始化。
定义一个people类:
Person *dwight = [[Person alloc] init];
给其属性赋值:
[dwight setName:@"Dwight Schrute"];
[dwight setAge:38];
NSLog(@"%@ (%d)", [dwight name], [dwight age]);
PS:一般NSString,NSArray,NSDictionary,NSData等类型的值打印用%@,int等C中的类型,按照C语言打印的关键字打印,NSInteger,NSNumber打印时用%d。
打印结果:
protocol协议,设置代理
协议(protocol)是ObjC中很重要的一部分,它用来定义可由任何其他类完成的方法,当本类中需要完成某些功能时,可由protocol来实现
protocol在三种情况中需要用到:
需要声明别的类期望完成的方法时
在隐藏自身类的情况下声明该类对象的接口时
在某些没有继承关系的类之间获取其之间的相似性,即两个类之间没有继承关系,但是都需要实现同样的方法时,就可通过代理来实现。
protocol文件中只是定义一些方法,当你在类中实现了这个protocol时,你就需要补充这些方法,系统会自动调用这些方法
protocol中方法分为@required和@optional,其中在@required下的方法必须实现,@optional中方法是选择性实现,也可不实现。
下面以一个简单实例说明protocol的用法(OS X下)在iOS下同样使用
一、新建一个Objective-C class,命名为iOSCoder
①、在iOSCoder@end后面定义一个protocol,命名为MyprotocolDelegate,并声明@required和@optional方法
②、在#import后声明@protocol MyprotocolDelegate
③、在interface中声明属性@property(nonatomic,assign) id&MyprotocolDelegate&&&
整个.h文件如下
#import &Cocoa/Cocoa.h&
@protocol MyprotocolD
@interface iOSCoder : NSObject
//声明delegate属性
@property(nonatomic,assign) id&MyprotocolDelegate&&&
//定义protocol
@protocol MyprotocolDelegate &NSObject&
//必须实现方法
-(void)StartObjectiveC;
-(void)StartP
//选择实现方法
-(void)StartJavaS
-(void)StartP
二、在需要用到iOSCoder类的文件中,声明并进行初始化
如果要用到iOSCoder中的delegate,则必须在.h文件中进行声明,声明格式
@interface 类名:继承类&MyprotocolDelegate&
定义iOSCoder对象
iOSCoder *ios = [[iOSCoder alloc] init];
&&& ios.delegate =
&&& if ([ios respondsToSelector:@selector(StartObjectiveC)]) {
&&&&&&& [self StartObjectiveC];
&&& if ([ios respondsToSelector:@selector(StartPrograming)]) {
&&&&&&& [self StartPrograming];
实现required方法
-(void) StartObjectiveC
&&& NSLog(@"@required,StartObjectiveC");
-(void)StartPrograming
&&& NSLog(@"@required,StartPrograming");
附:在iOS ViewController中使用时
假设A要跳转到B页面时需要在B页面中实现A中的protocol方法
#import &UIKit/UIKit.h&
@class AViewC
@protocol ADelegate &NSObject&
- (void) AMethod
@interface AViewController : UIViewController
&&&& id&ADelegate& _
@property(nonatomic,assign)id&ADelegate&
在页面跳转之前加上
if (_delegate && [_delegate respondsToSelector:@selector(AMethod)]) {
&&&&&&&&& [_delegate AMethod];
在B页面中声明代理&ADelegate&,实现AMethod方法,实例化A对象,并设置代理
则在B界面会调用AMethod方法,即完成了protocol的实现
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Objective-C入门教程02:定义一个类和实例化一个对象
我的图书馆
Objective-C入门教程02:定义一个类和实例化一个对象
Objective-C入门教程02:定义一个类和实例化一个对象
作为一个Javaer,你肯定已经了解了类、对象和方法的相关概念。如果你现在对类和对象还没一个深刻的认识,强烈建议先去了解一下OO的相关知识。Objective-C如何定义一个类比如我们把手机就可以看成一个类,手机具有颜色、品牌、操作系统等属性。同时也具有打电话、发短信等功能(行为)。在Java中,我们用代码可以表示为:package com.
* @author liuzc
public class Phone {
/******* Getter & Setter *******/
public String getColor() {
public void setColor(String color) {
this.color =
public String getOs() {
public void setOs(String os) {
public String getBrand() {
public void setBrand(String brand) {
this.brand =
public void makeCall(String number){
System.out.println("正在呼叫:"+number);
public void sendSMS(String number,String content){
System.out.println("发送短信给"+number+" 内容为:"+content); }
}下面我们先给出Objective-C中的代码,然后再来进一步说明。类声明(接口)//
OCStudy_01
Created by Liuzc on 12-12-5.
Copyright (c) 2013年 . All rights reserved.
#import &Foundation/Foundation.h&
@interface Phone : NSObject{
NSString *
NSString *
NSString *
-(NSString*)
-(NSString*)
-(NSString*)
-(void) setColor:(NSString*) _
-(void) setBrand:(NSString*) _
-(void) setOs:(NSString*) _
-(void) makeCall:(NSString*)
-(void) sendMsg:(NSString*) number AndContent:(NSString*)
@end类实现//
OCStudy_01
Created by Liuzc on 12-12-5.
Copyright (c) 2013年 . All rights reserved.
#import "Phone.h"
@implementation Phone
-(NSString*) color{
-(NSString*) brand{
-(NSString*) os{
-(void) setColor:(NSString*) _color{
-(void) setBrand:(NSString*) _brand{
-(void) setOs:(NSString*) _os{
-(void) makeCall:(NSString*) number
NSLog(@"正在呼叫: %@",number);
-(void) sendMsg:(NSString *)number AndContent:(NSString *)content{
NSLog(@"发送短信给 %@ ,内容为:%@",number,content);
@endPhone.h是头文件,Phone.m是Objective-C的类文件,在头文件中,我们需要编写@interface部分,在Phone.m文件中编写类的实现.当然,你把代码写在一个文件里也是可以的,但我们一般不推荐这样做。例如下面的代码也可以正常编译:Phone.m//
OCStudy_01
Created by Liuzc on 12-12-5.
Copyright (c) 2013年 . All rights reserved.
#import &Foundation/Foundation.h&
@interface Phone : NSObject
-(NSString*)
-(NSString*)
-(NSString*)
-(void) setColor:(NSString*) _
-(void) setBrand:(NSString*) _
-(void) setOs:(NSString*) _
-(void) makeCall:(NSString*)
-(void) sendMsg:(NSString*) number AndContent:(NSString*)
@implementation Phone
NSString *
NSString *
NSString *
-(NSString*) color{
-(NSString*) brand{
-(NSString*) os{
-(void) setColor:(NSString*) _color{
-(void) setBrand:(NSString*) _brand{
-(void) setOs:(NSString*) _os{
-(void) makeCall:(NSString*) number
NSLog(@"正在呼叫: %@",number);
-(void) sendMsg:(NSString *)number AndContent:(NSString *)content{
NSLog(@"发送短信给 %@ ,内容为:%@",number,content);
@end下面我们通过一张图来说明定义一个类的接口@interface部分的语法。 定义新类时,在Java中,当一个类的父类为Object时,我们不需要指明 ClassName extends Object。而在Objective-C中,需要显示的指明该类的父类,哪怕该类的父类为NSObject。其次还必须定义在处理该类的对象时将要用到的各种操作或是方法类型。同Java一样,类名通常以大写字母开头,尽管没有要求一定要这样做,但这种约定能使他人更容易读懂你的程序。还有一个容易忽视却又很重要的细节,在Objective-C中,所有的类名都必须是唯一的(Class Names Must Be Unique)。也许现在你已经明白为什么使用XCode新建项目时,为什么推荐你填写前缀了。For this reason, it’s advisable to prefix the names of any classes you define。在类的声明中,使用@interface定义类的接口部分。在Java中,interface是定义接口的关键字,可此interface非彼interface,实际上我们所理解的Java中的接口(interface),在Objective-C中称为。同样,我们通过一张图来说明类的实现@implementation部分的语法&@implementation部分包含声明在@interface部分的方法的实际代码。实现代码中必须导入它的接口文件,写在代码的第一行。NewClassName表示的名称与@interface中的名称相同,可以在类的名称之后使用冒号,@implementation NewClassName: ParentClassName,但这里与Java中一样,它是可选的,而且通常并不这样做。&Objective C中类分为两个文件,一个是.h文件,一个是.m文件.h文件存放函数的声明,类声明使用关键字@interface @end.m文件存放类的具体实现,类实现使用关键字@implementation @end&声明对象和对象初始化上面我们定义了一个类,并声明了几个属性和方法.那么我们如何使用我们定义的类呢?也就是说如何声明和初始化一个对象?在java中我们这样做.Phone phone = new Phone();
phone.setOs("iOS");
phone.setColor("white");
phone.setBrand("iPhone");
//调用打电话的方法
phone.makeCall("10086");
//调用发短信的方法
phone.sendSMS("10086","什么时候和Apple合作出iPhone移动3G版啊?");在java中实例化一个对象我们使用new关键字,在Objective-C中我们也可以使用new关键字实例化一个类,不过语法与java有点区别:Phone* phone =[Phone new];&有点C/C++基础的应该知道”*”代表的是指针变量,[Phone new]实例上是调用Phone的new方法,(你也许会诧异,我们在Phone中没有定义new方法啊,事实上new是NSObject中定义的方法,因为Phone继承了NSObject,所以也继承了new方法,想要了解Objective-C中更多关于继承的知识,可以查看).如果你查看网上一些Objective-C的开源代码,你会发现在实例化一个类时,大多使用的是下面的语法:Phone* phone = [[Phone alloc] init];甚至看到这样把两者拆开的写法:Phone* phone = [Phone alloc];[phone init]通过调用这两个方法,完成了对一个对象的声明和初始化,其中alloc是为对象申请了内存空间,init则完成了对象的初始化.在完成对象声明和初始化以后,就可以调用对象的方法:[phone setOs:@”iOS”];[phone makeCall:@”10086″];你也许就会问了,既然使用new和使用alloc init都可以,那我们通常应该使用哪一种,或者说这两种方式有什么区别呢?在回答这个问题之间,我们先来介绍Objective-C中的构造函数。Objective-C的构造函数在java中,当我们在实例化一个对象并对成员变量赋值时,我们通常使用构造函数,类似于:Phone phone = new Phone(“iOS”);当然构造函数需要我们自己重构.在Objective-C中,构造函数可以使用任何方式命名,但是通常,将他们命名为 init 。构造方法返回对象的一个指针,我们可以通过调用超类的 init 方法来获取这个指针,超类是当前的类所派生自的类,也就是当前类的父类,这里通常是 NSObject 类。-(Phone *) initWithOs:(NSString *)_os{
self = [super init];
[self setOs:_os];
-(Phone *)initWithOs:(NSString *)_os andWithColor:(NSString *)_color{
self = [super init];
[self setOs:_os];
[self setColor:_color]
}我们再来初始化Phone时,就可以使用下面的语句:Phone* phone =[[Phone alloc] initWithOs:@”iOS”];或者:Phone* phone =[[Phone alloc] initWithOs:@”iOS” andWithColor:@”black”];但是如果这里我们使用new的话,就无法做到这一点.所以你现在应该大致清楚了new和alloc+init的区别.new doesn’t support custom initializers (like initWithString)alloc-init is more explicit than new所以默认情况下,&new和alloc+init是没有什么区别的,new =&alloc+init毫不夸张的说,+new的实现应该是这样:+ (id) new
return [[self alloc] init];
}中关于new的介绍也说明了这点:This method is a combination of&&and&. Like&, it initializes the&isa&instance variable of the new object so it points to the class data structure. It then invokes the&&method to complete the initialization process.这一讲关于Objective-C中类的介绍就到这里,下一讲将介绍.
TA的推荐TA的最新馆藏[转]&推荐这篇日记的豆列
······您所在的位置: &
详解Objective-C中静态变量使用方法
详解Objective-C中静态变量使用方法
在Objective-C中如何实现像C++中那样的静态成员变量呢?你需要做的是在一个类A的implementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class method,也就是类方法)来操作该变量。
Objective-C中静态变量使用方法是本文要介绍的内容,Objective-C 支持全局变量,主要有两种实现方式:第一种和C/C++中的一样,使用&extern&关键词;另外一种就是使用单例实现。(比如我们经常会把一个变量放在AppDelegate里面作为全局变量来访问,其中AppDelegate就是一个单例类)
在Objective-C中如何实现像C++中那样的静态成员变量呢?
你需要做的是在一个类A的implementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class method,也就是类方法)来操作该变量。这样在其它类中你就不需要创建A类的实例来对static变量进行访问。虽然该static变量并不是A类的静态成员变量,但是也算达到了同样的效果。static变量的作用域被限制在单一的文件中。代码可以如下所示:
//example.h&&& &@interface&Example&:&NSObject&{&& &&& &}&& &&& &-&(id)&& &+(int)instanceC&& &&& &@end&& &&& &//example.m&&& &#import&&example.h&&&& &&& &static&int&&& &&& &@implementation&Example&& &-(id)init{&& &self&=&[super&init];&& &if(nil!=self){&& &count+=1;&& &}&& &return&&& &}&& &&& &+(int)instanceCount{&& &return&&& &}&& &&& &@end&& &//example.h &@interface&Example&:&NSObject&{ &&} &&-&(id) &+(int)instanceC &&@end &&&//example.m &#import&&example.h& &&static&int& &&@implementation&Example &-(id)init{ &self&=&[super&init]; &if(nil!=self){ &count+=1; &} &return& &} &&+(int)instanceCount{ &return& &} &@end&
上面的例子中你就可以通过[Example instanceCount]对静态变量count进行访问,无须创建实例。
小结:详解Objective-C中静态变量使用方法的内容介绍完了,希望通过本文的学习对你有所帮助【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
8月第二周,开发者们每月必看的编程语言排行榜如期而至。在一周
PC互联网巨头百度、腾讯和阿里,通过在移动互联网投资
谷歌在新品发布会上正式发布了传闻已久的Android 4.3
App定价是开发者不可忽视的部分,它是确保应用高能见
本书是程序员面试宝典系列中的一册,也是上一本《程序员面试宝典》的姊妹书。本书对程序设计面试中Java常见的题型和常用解答技巧
Windows Phone专家
Android开发专家
51CTO旗下网站}

我要回帖

更多关于 名创优品加盟条件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信