您的位置:首页 > 移动开发 > Objective-C

零碎的Objective-C知识 (三)

2016-10-13 10:48 155 查看

零碎的Objective-C知识 (一)

零碎的Objective-C知识 (二)

代码块

1.两个nsstring * 类型的地址变量相比较,==表示直接比较的地址值,而isequalto表示比较这两个地址直接指向的变量的值(用于比较两个字符串的字符序列是否相等)

NSString * str1 = [[NSString alloc]initWithFormat:@"你好”];
NSString * str2 = @"你好";
NSString * str3 = @"你好";
NSString * str4 = [[NSString alloc]initWithFormat:@"你好”];


第一行和第四行地址值不等,因为他们是系统分别单独创建的

第二行和第三行地址值相等,因为他们两个地址指向同一个变量

输出的地址值分别为:

0x10020a110

0x100001040

0x100001040

0x10020a450

全部代码:

#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {
@autoreleasepool {

NSString * str1 = [[NSString alloc]initWithFormat:@"你好"];
NSString * str2 = @"你好";
NSString * str3 = @"你好";
NSString * str4 = [[NSString alloc]initWithFormat:@"你好"];
NSLog(@"%p",str1);
NSLog(@"%p",str2);
NSLog(@"%p",str3);
NSLog(@"%p",str4);
NSLog(@"%@",str1);
NSLog(@"%@",str2);
NSLog(@"%d",str1==str2);
NSLog(@"%d",[str1 isEqualToString:str2]);
NSLog(@"%d",[str1 isEqualToString:str4]);
int a = 65;
char ch = 'A';
NSLog(@"%d",a==ch);
}
}


实验结果:

0x10020a110

0x100001040

0x100001040

0x10020a450

你好

你好

0

1

1

1

2.类别:

@interface 已有类 (类别名)

//方法定义

@end

定义类别的语法和定义类的语法区别

1.定义类时使用的类必须是该项目中没有的类,而定义类别时使用的类名必须是已有的类

2.定义类别时必须用圆括号来包含类名

3.类别中通常只定义方法

类别实现语法

@implementation 已有类(类别名)

//方法实现

@end



就编程习惯来讲,一般将类别的接口文件命名为“类名+类别名.h”的形式,实现文件命名为“类名+类别名.m”的形式

扩展:

@interface 已有类()

{

实例变量

}

//方法定义

@end

在定义类的扩展时,,可以额外增加实例变量,也可以使用@property来合成属性,(括setter,getter方法和对应的成员变量),但是,定义类的类别时,不允许额外定义实例变量,也不能用@property合成属性



实际上,拓展就是拓展一个.h文件而已,里面写上属性的声明或者方法,然后再原有的.m文件里面引用扩展的.h文件就可以了,扩展生成的.m文件可以注解掉里面的代码就可以了,最后在主函数里面导入拓展的.h文件即可



3.通过performSelect方法类调用私有方法

4.协议

OC中协议的作用就相当于其他语言中的接口的作用

协议通常是定义一组公用方法,但不会为这些方法提供实现,方法的实现交给类去完成

类别可以实现非正式协议

正式协议使用@protocol关键字

格式:

@protocol 协议名<父协议1,父协议2>
{
零到多个方法定义
}


协议只能继承协议,不能继承类

协议中定义的方法只有方法签名,没有方法实现,协议中所有的方法可以是类方法也可以是实例方法

协议里的方法都具有公开的访问权限

遵守(实现)协议格式:

@interface 类名 :父类<协议1,协议2>


5.大量用宏会导致二进制文件变大

6.Subview这个属性是用来获取父控件中的所有子控件的ViewWithtag可以包括父控件,并且可以递归遍历所有的子控件(xib或者storyboard中设定控件的tag值)

7.Command + shift +K,清空缓存,一般常用于托线警告

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c class nsstring