B站学习视频:
https://www.bilibili.com/video/BV14v411J7e7/?spm_id_from=333.337.search-card.all.click&vd_source=d33b44674c517c8b7928e8d3ac316b37
类别
Foundation
文件操作、属性列表
OC的内存管理:
1、内存管理常见问题
2、引用计数
3、内存管理黄金法则
4、MRC和ARC(属性关键字weak/strong)
5、自动释放池
6、Foundation常用类的内存管理误区
常用设计模式介绍
1、单例
2、KVC&KVO
3、观察者模式
一个简单的类实现:
#import <Foundation/Foundation.h>
@interface Student : NSObject
-(void) SayHello;
-(void) SayHello3:(char*) myname :(int)age; //多个变量以:分隔,而不是逗号分隔,而且:前面最好以空格分开,否则还有警告。
@end
@implementation Student
-(void) SayHello
{
NSLog(@"sayhello");
}
-(void)SayHello3:(char*) myname :(int) age //多个变量以:分隔,而不是逗号分隔,而且:前面最好以空格分开,否则还有警告。
{
NSLog(@"%s sayhello %d", myname, age);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *s = [[Student alloc]init];
[s SayHello];
[s SayHello3:"xiaoming":12];
}
return 0;
}
注意:iOS警告’xxx’ used as the name of the previous parameter rather than as part of the selector
https://www.jianshu.com/p/1cd233a1f560
多为传入多个变量没有空格引起,在第二变量的冒号前面加个空格既可以解决。
#import <Foundation/Foundation.h>
@interface Student : NSObject
-(void) SayHello;
-(void) SayHello3:(NSString*) name :(NSInteger) age; //多个变量以:分隔,而不是逗号分隔,而且:前面最好以空格分开,否则还有警告。
@end
@implementation Student
-(void) SayHello
{
NSLog(@"sayhello");
}
-(void)SayHello3:(NSString*) name :(NSInteger) age //多个变量以:分隔,而不是逗号分隔,而且:前面最好以空格分开,否则还有警告。
{
NSLog(@"%@ sayhello %ld", name, age);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *s = [[Student alloc]init];
[s SayHello];
[s SayHello3:@"xiaoming" :12];
}
return 0;
}
知识点1:标签的使用
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (nonatomic,strong) NSString* name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic,strong) NSString* gender;
-(void) setName:(NSString*)name setAge:(NSInteger) age setGender:(NSString*)gender;
@end
@implementation Student
-(void) setName:(NSString*)name setAge:(NSInteger) age setGender:(NSString*)gender
{
_name = name;
_age = age;
_gender = gender;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *s = [[Student alloc]init];
[s setName:@"xiaoming" setAge:12 setGender:@"boy"];
NSLog(@"%@ %ld %@", s.name, s.age, s.gender);
}
return 0;
}
-(void) setName:(NSString*)name setAge:(NSInteger) age setGender:(NSString*)gender;这里的setName、setAge、setGender为标签。
_name = name;注意这里的_name是下划线开头,和property中的name是对应的,这是object c默认潜规则。
知识点2:object c中的静态方法和成员方法的调用方式
#import <Foundation/Foundation.h>
@interface Student : NSObject
+(void) SayHello;
-(void) Nihao;
@end
@implementation Student
+(void)SayHello
{
NSLog(@"hello");
}
-(void)Nihao
{
NSLog(@"nihao");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
[Student SayHello];
Student *s = [[Student alloc] init];
[s Nihao];
}
return 0;
}
知识点3:NSString类
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//常量字符串
NSString *str1 = @"nihao";
NSString *str2 = [[NSString alloc] initWithString:@"hello"];
NSString *str3 = [NSString stringWithString:str2];
//可变字符串
NSMutableString *str4 = [[NSMutableString alloc] init];
[str4 appendString:@"world"];
[str4 appendString:@"world2"];
NSLog(@"%@ %@ %@ %@", str1, str2, str3, str4);
}
return 0;
}