标签归档:objective-c

委托协议讲述比较详细


1 ios 协议 委托语法简介

IOS协议,同c#、java中的接口具有相同的功能,都是用来定义一个实现这个接口类的行为。
它是对一个对象行为的定义和一个对象功能的规范。
常用的关键字:
@required是必须实现的方法;
@optional是可选实现;

IOS委托:
委托是OC中的一种设计模式,实现这种模式,需要使用协议。
在ios中很多原生态的控件使用这种设计模式,例: UITableView控件。
在ios中委托的功能主要是将需要做的事情委托给其它对象去做。


2 ios 委托的demo实现

例: 两个类之间传值,一个类调用另外一个类中的方法 

 
@protocol userDelegate 
@required
- (void)userCount;
@optional
- (void)userMethod;
 
@end
下文将定义两个类 "user1"  "user2"

 
@interface user1 : NSObject
 
@end
 
@interface user2 : NSObject

@property (assign,nonatomic) id didUserDelegate;
 
@end
 实现其中的getUserCount方法:

@implementation user1
 
- (void)getUserCount{
    NSLog(@"user1中getUserCount的实现");
}
 
@end
 
@implementation user2
 
- (void)getUserCount{
    NSLog(@"user2中getUserCount的实现");
}
 
@end
调用:
user1 *user1=[[user1 alloc]init];
 
user2 *user2=[[user2 alloc]init];
 
[user2 getUserCount];
 
[user1 getUserCount];

user2.didBookDelegate=user1;
[user2.didBookDelegate getUserCount];

程序开发中的命名方式


ios命名最佳实践

查阅Cocoa框架,我们发现通过阅读方法名,我们就可以大致猜出框架的功能及所需要的参数,这个就体现出在编程开发中命名的重要性。


ios变量命名

cocoa是一种动态类型语言,内部的好多数据按对象进行存储。例:数组 字典 都是无关联类型,可以在一个数组/字典中存储很多类型不相同的对象。
NSArray *dates = @[@”2/2/2016″];
NSDate *firstDate = [dates firstObject];
以上的代码,主要是将一个数组的第一个元素赋值给变量firstDate;
以上的代码,在实际运行中,可以会产生异常,主要是dates对象中的第一个元素不是一个“日期”类型的对象,所以此时如果我们不注意观察,那么就会导致一个运行中的异常产生。
向以上变量的命令,我们正确的命令方式应该是:

NSArray *dateStrings =@[@"2/2/2016"];

当我们把变量的命名后面加上string之后,我们就可以很直观的清楚以上是一个字符串形的日期数组。


方法命名

在程序中,方法的命名,我们应该尽量做到一个方法的名字可以清晰地表明这个方法接受的参数值、参数类型、返回值类型、 返回值数量

例:

-(void) add;

以上的方法”add”,首先让人联想到是一个新增方法,但是我们却不知道add需要添加一个什么样的参数?

所以我们应该采用很清晰的命名方式,如下所示

-(void)addEmptyName;
-(void)addName;

从以上的代码中,我们可以看出addEmptyName,就是让我们添加一个空的Name
addName:接受一个Name参数

————————————————————————————————
例:
-(void)setURL:(NSString *)URL;//不明确的方法定义
这种方法的定义因为没有指明参数的类型,会让人第一时间联想到参数类型为NSURL,而不是一个NSString,
-(void)setURLString:(NSString *)url;
-(void)setURL:(NSURL *)URL;

相关阅读:
cocoa语言简介

IOS-类(class)简介


一、类简介

类是定义一组集合---包含(属性和变量 方法)。


二、类定义方法

iOS 类定义

2.1 新建类文件
iOS 新建类文件

iOS 输入类名

2.2 生成testClass.h testClass.m文件

/*testClass.h 类定义文件*/
#import < Foundation / Foundation.h >

@interface testClass : NSObject
{
    NSString *name1; //成员变量定义(默认成员变量为protected属性)
    NSNumber *age;   //成员变量定义
    NSString *info1; //成员变量定义
}

-(void)setName1:(NSString *) n;  //成员方法
+(void)printInfo;      //类方法 类似于其它语言中的静态方法(static)

@end

/*testClass.m 类实现文件*/
#import "testClass.h"

@implementation testClass

/*实现类*/  
-(void)setName1:(NSString *) n{
   name1 = @"123456";
}
+(void)printInfo{
    NSLog(@"print name");
}



@end