Objective-C 类与属性 减号表示对象方法 加号表示静态方法(类方法)

Objective-C 类与属性 减号表示对象方法 加号表示静态方法(类方法)

1、减号表示对象方法。语法:-(返回值类型)方法名:(参数类型)参数名

@interface LoginViewController : UIViewController<UIGestureRecognizerDelegate, UITextFieldDelegate, UITextViewDelegate>

@property (weak, nonatomic) IBOutlet UITextField *usercodeTextField;
@property (weak, nonatomic) IBOutlet UITextField *userpwdTextField;
@property (weak, nonatomic) IBOutlet UIButton *loginButton;

// 例子: 一个方法可以包含多个参数
- (void) setNameStr: (NSString *)aName secondName: (NSString *) bName thirdName: (NSString *) cName;

@end

特点:
函数的返回类型和参数类型必须用括号。
函数的形参用冒号表示。

2、加号表示静态方法(类方法)。语法:+(返回值类型)方法名:(参数类型)参数名

@interface NSString (MD5)

// MD5加密
+ (NSString *)md5String:(NSString *)str;

@end

区别:
对象方法可以直接访问属性,静态方法不能访问属性。
[self setNameStr: @”蒋” secondName: @”智” thirdName: @”昊”];
静态方法可用类名直接调用方法,而对象方法不行。
NSString *userpwd = [NSString md5String:(_userpwdTextField.text)];

完整代码:

//
//  Info.h
//  cts
//
//  Created by jiangzhihao on 2018/11/9.
//  Copyright © 2018年 蒋智昊. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Info : NSObject
{
    
}

// 括号外面可以申明属性和方法
// 用@property申明属性
// 说明:属性会自动合成setter和getter方法
@property int msgcode;

// 方法:方法分为对象方法和类方法
// 对象方法以-开头,只有这个类中的某个具体对象才能调用
// 类方法以+开头,类方法只能用类去调用

// 声明一个对象方法
- (NSString *)getAction:(NSString *)code;

// 声明一个类方法
+ (void)setAction;

@end



NS_ASSUME_NONNULL_END
//
//  Info.m
//  cts
//
//  Created by jiangzhihao on 2018/11/9.
//  Copyright © 2018年 蒋智昊. All rights reserved.
//

#import "Info.h"

@implementation Info


// 声明一个对象方法
- (NSString *)getAction:(NSString *)code
{
    NSString *str = [NSString stringWithFormat:@"%@%@", @"hi", code];
    return str;
}

// 声明一个类方法
+ (void)setAction
{
    NSLog(@"action");
}

@end
// 调用类方法测试结果
   [Info setAction];
   // 创建对象info
   Info *info =[[Info alloc]init];
   NSString *say = [info getAction:@"0001"];
   NSLog(@"%@", say);
   
   // VC (Key Value Coding) Objective-C 允许以字符串形式间接操作对象的属性
   // 这种方式的全称是 Key Value Coding (简称KVC),即键值编码
   // 通过KVC方式设置属性
   Info *inf = [[Info alloc] init];
   [inf setValue:@1000 forKey:@"msgcode"];
   // 通过KVC方式读取属性
   NSString *msgcode = [inf valueForKey:@"msgcode"];
   NSLog(@"%@", msgcode);

 

发表回复

您的电子邮箱地址不会被公开。