- (id)init{
if (self = [super init]){ //先赋值完毕并且判断self的值
//初始化成功
_age = 1;
}
return self;
}
- (id)initWithName : (NSString*)name{
if(self = [super init]){
_name = name;
}
return self;
}
原则:自己的属性由自己的类来处理,要传递则通过super的构造方法。
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates
下存放的就是各个工程的路径。
修改Xcode模板注释
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate/NSObjectObjective-C
int count = [NSString numberCountOfString:@"abc12345sjai6ais7as8ds9”];
[@"asdasd123" numberCountOfString]
实现方法:
+ (int)numberCountOfString:(NSString *)str{
int count = 0;
for(int i = 0; i < str.length; i++){
unichar c = [str characterAtIndex:i];
if(c >= '0' && c <= '9'){
count++;
}
}
return count;
}
- (int)numberCountOfString{
int count = 0;
for(int i = 0; i < self.length; i++){
unichar c = [self characterAtIndex:i];
if(c >= '0' && c <= '9'){
count++;
}
}
return count;
}
Person *p = [[Person alloc] init];
Class c = [p class];
Class c2 = [p class];
Class c3 = [Person class];
NSLog(@"c1 = %p, c2 = %p, c3 = %p",c,c2,c3);
可以看到三个地址相同,说明都是指向Person类的。
类的加载:load方法是在类加载时调用的方法。
可以发现,先加载父类,再加载子类。
当程序启动时,就会加载一次项目中所有的类(包括分类),类加载完毕后就会调用+load方法
先加载父类、再加载子类。
当第一次使用这个类,会调用+initialize方法(从分类开始找)。
三十五.description方法
- (NSString *)description{
return [NSString stringWithFormat:@"age = %d, no = %d",_age,_no];
}
这样就可以用%@来打印类内所有内容了。
防止死循环:不要在重写的description里面使用self打印%@。
使用类方法+description:NSLog(@“%@“,[self class]);
但是+的方法默认不返回地址,仅仅返回类名。
%p打印&p为打印对象的真实地址。
三十六.NSLog的使用技巧