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

Objective-C小知识收集

2016-05-17 11:08 423 查看

1.instancetype和id的区别

(1)相同点

都可以作为方法的返回类型

(2)不同点

①返回类型

instancetype可以返回和方法所在类相同类型的对象;

id只能返回未知类型对象.

②instancetype只能作为返回值,不能像id那样作为参数

//例
- (void)setValue:(instancetype)value; //错
- (void)setValue:(id)value;           //对


2.类方法(+)和对象方法(-)

(1)类方法(+):

通过类名调用,类方法中不能访问类中实例变量.

(2)对象方法(-):

通过对象调用,对象方法可以直接访问类中实例变量

3.声明@property时的属性修饰符

(1)nonatomic/atomic

多线程的控制,基本用nonatomic多

(2)assign

用于修饰基本类型变量,非OC对象

(3)retain

用于修饰NSString外的OC对象

(4)copy

用于修饰NSString对象

4.Category的使用

(1)基本语法

@interface 类名(category名)


(2)作用

在不改变原有类的基础上,给这个类增加新的方法

(3)优先级

category中的方法优先级高于类中方法

(4)易错点

不可以声明新的成员变量

5.对象的初始化

(1)alloc

alloc是从NSObject继承来的类方法,用于给对象分配存储空间.所有的成员变量在此时都确定了自己的内存位置,并被赋初值

整数类型为0,
浮点数为0.0,
BOOL为NO,
对象类型为nil


alloc方法返回对象的指针

(2)init

init是从NSObject继承来的成员方法.这个方法是在对象创建过程可以参与的方法.因此可以自定义init方法.Objective-C对init方法没有特殊的要求.一般init方法都返回当前类型的指针或者id类型,id类型在Objective-C中是泛型对象,可以表示任意类型的OC对象.

6.description方法

- (NSString *)description;


用于输出对象的首地址(不重写的话);

由于这是NSObject的成员方法,因此不必声明,可以直接实现.

7.动态判定和选择器(NSObject方法)

//1.用于判断对象是否是aClass类型的实例,但不包含子类的实例
- (BOOL)isMemberOfClass:(Class)aClass;

//2.用于判断对象是否是aClass类型的实例或者aClass的子类的实例
- (BOOL)isKindOfClass:(Class)aClass;

//3.用于判断类或者对象是否能够响应某个方法,这个方法用选择器表示
- (BOOL)respondsToSelector:(SEL)aSelector;

//4.用于动态调用类或者对象方法
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

//5.用于判断类型所产生的实例是否能够回应某个方法,这个方法,使用选择器表示.
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;


8.单例模式

(1)类方法使用

方法名一般以shared/default/current开头

(2)程序举例:

①SingleClass.h

#import <Foundation/Foundation.h>

@interface SingleClass : NSObject

@property (nonatomic,copy) NSString *name;

+ (instancetype)sharedSingleClass;

@end


②SingleClass.m

#import "SingleClass.h"

//用于创建一个全局静态对象指针
static SingleClass *single = nil;

@implementation SingleClass

+ (instancetype)sharedSingleClass
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
single = [[SingleClass alloc] init];
});
return single;
}

@end


9.Plist文件

(1)plist文件的根路径是NSArray或NSDictionary

plist文件的子路径只能是NSString,NSNumber,NSData,NSArray和NADictioanry

(2)plist读写

//写
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

//读
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfFile:(NSString *)path;
+ (nullable NSDictionary<KeyType, ObjectType> *)dictionaryWithContentsOfFile:(NSString *)path;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: