关于objective-c类方法与实例方法的一些疑问
巴扎黑
巴扎黑 2017-04-24 09:13:06
0
2
450

之前都是在搞前端js
之后写ios开始慢慢接触objective-c
有个疑问

//实例方法调用
NSString *str1 = [[NSString alloc] initWithString:@"123123"];

//类方法调用
NSString *str2 = [NSString stringWithString@"123123"];

我的疑问可能用上面例子会不太能凸显出来
疑问在于,
实例方法必须创建一个实例后使用实例进行调用
也就是内存中必存在一个实例
如果我想不通过实例来达到某些操作
那在设计API时可以设计成类方法,这样就可以直接通过类名进行调用
但是这种情况难道就不会生成实例在内存中了吗??
或者说,虽然没有生成实例,但内存依然会分配空间
那如果

[XXXClass abc];
[XXXClass bcd];
[XXXClass cde];
[XXXClass def];

这种情况下,内存会分配多少块内存空间呢?
而但代码域(如方法内)结束后,内存空间又是否能正常释放呢?

巴扎黑
巴扎黑

répondre à tous(2)
阿神

Dans l'exemple que vous avez donné, qu'il s'agisse d'une méthode objet ou d'une méthode classe, leur but est d'obtenir une instance d'objet.
Comment configurer vos objets sans allouer d'abord de l'espace mémoire ?
C'est peut-être ainsi que cela est implémenté dans la méthode de classe :

+ (instancetype)stringWithString:(NSString *)string {
    NSString *str = [[self alloc]initWithString:string];
    return str;
}
PHPzhong

Maintenez la touche Ctrl enfoncée et cliquez sur NSString pour y jeter un œil.

- (instancetype)initWithString:(NSString *)aString;
+ (instancetype)stringWithString:(NSString *)string;

Regardez le devant de ces deux méthodes, l'une est "-" et l'autre est "+"
En oc, si vous déclarez une méthode avec un signe plus, vous pouvez appeler la méthode de cette classe sans instanciation.
Si vous utilisez un signe moins pour déclarer une méthode, vous devez d'abord allouer un objet avant de pouvoir appeler la méthode dans cette classe.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!