读一读

NSString *some = @"abcdefg你";
NSLog(@"%@",some);

//将字符串转成大写
some = [some uppercaseString];
NSLog(@"%@",some);

//将字符串转成小写
some = [some lowercaseString];
NSLog(@"%@",some);

//获取字符串长度 8
NSLog(@"%u",[some length]);

//在字符串中查找字符串
NSRange rang = [some rangeOfString:@"c"];
if( rang.location == NSNotFound )
{
    NSLog(@"%@",@"not found");
}
else
{
    NSLog(@"%d %d",rang.location, rang.length);
}

//判断两个字符串是否相同
if( [some isEqualToString:@"abcdefg你"] )
{
    NSLog(@"%@",@"YES");
}

//字符串转数值
NSLog(@"%d",[@"123" intValue]);

//字符串是否以什么开头
if([some hasPrefix:@"abc"])
{
    NSLog(@"%@",@"YES");
}

//字符串是否以什么结尾
if([some hasSuffix:@"你"])
{
    NSLog(@"%@",@"YES");
}

//截取字符串
NSLog(@"%@", [some substringWithRange:NSMakeRange(1, 5)]);

//剔除两边空格
NSLog(@"%@", [@"  ccd  " stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]);



//常量字符串 NSString
char *cstr = "你好啊!yyds";
NSString *str1 = @"123";
NSString *str2 = [NSString stringWithFormat:@"%d",7758258];
NSString *str3 = [NSString stringWithUTF8String:cstr];
NSString *str4 = [[NSString alloc] initWithString:str1];
NSLog(@"%@ %@ %@ %@", str1, str2, str3, str4);



CGPoint p = {100, 100};//点
NSLog(@"x=%g,y=%g",p.x,p.y);

CGSize size = {100, 200};//大小
NSLog(@"width=%g,height=%g",size.width,size.height);

CGRect rect = {p, size};//矩形
NSLog(@"width=%g,height=%g",rect.size.width,rect.size.height);

NSRange range;//范围
range.location = 10;
range.length = 10;

//自定义
struct Person{
    int age;
};
struct Person person = {18};
NSLog(@"age:%d", person.age);



if( [circle isKindOfClass:Circle.class] )//判断对象是否是该类的实例
{
    NSLog(@"%@", @"YES");
}
if( [circle isMemberOfClass:Circle.class] )//判断对象是否为该类或子类的实例
{
    NSLog(@"%@", @"YES");
}



#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Circle : NSObject
{
    //@private //私有变量 类中可使用
    //@protected //保护变量 类中和子类可使用
    //@public //对象可以通过->访问
    int rad;
}
@property (nonatomic) double _width; //非线程安全属性 通过对象._width访问
@property (atomic) double _height; //线程安全属性 通过对象._height访问
@end

NS_ASSUME_NONNULL_END



//
//  Circle.h
//  Circle
//
//  Created by chicai on 2021/8/18.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Circle : NSObject
{
    int rad;
}
-(double)area;//成员方法
-(void)SetRad:(int)_rad;//成员方法
+(id)circle;//静态方法
@end

NS_ASSUME_NONNULL_END


//
//  Circle.m
//  Circle
//
//  Created by chicai on 2021/8/18.
//

#import "Circle.h"

@implementation Circle
-(void)SetRad:(int)_rad
{
    self->rad = _rad;
}
-(double)area
{
    return  3.14 * rad * rad;
}
+(id)circle
{
    return [[self class] new];
}
@end


#import <Foundation/Foundation.h>
#import "Circle.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Circle *circle = [Circle circle];
        [circle SetRad:20];
        NSLog(@"area: %f", [circle area]);
    }
    return 0;
}



在xcode中可以在项目中直接右键选择New File,再选择Cocoa Class,输入类名语言选择oc。

自动帮忙创建声明头文件和实现文件,类名.h 类型.m


//
//  SStudent.h
//  SStudent
//
//  Created by chicai on 2021/8/16.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface SStudent : NSObject
{
    NSString *name; //可以在对象中通过 self->name 访问,或直接name访问
    int age;
}
-(void)say;
//(返回类型)函数名字:(参数类型)参数名字 标签:(参数类型)参数名字
-(void)setName:(NSString *) _name andAge:(int)_age;
@end

NS_ASSUME_NONNULL_END


//
//  SStudent.m
//  SStudent
//
//  Created by chicai on 2021/8/16.
//

#import "SStudent.h"

@implementation SStudent
-(void) say
{
    NSLog(@"name:%@ age:%d",name,age);
}
-(void)setName:(NSString *)_name andAge:(int)_age
{
    name = _name;
    age = _age;
}
@end


#import <Foundation/Foundation.h>
#import "SStudent.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        SStudent *obj = [[SStudent alloc] init];//对象创建 == [SStudent new]
        [obj setName:@"haha" andAge:18];//方法调用 参数赋值
        [obj say];//方法调用
    }
    return 0;
}



NSString *a = @"hEloow";//oc的字符串
char *s = "haha";//c的字符串
NSLog(@"%@ %s", a, s);
NSString *str = [NSString stringWithFormat:@"%@ %s", a, s];
NSLog(@"%@", str);



void __NT__OpenFacebookPublicPage(const char * pageid, const char * name)
{
    NSString *str_url = [NSString stringWithFormat:@"%@%@", @"fb://profile/", __makeNSString(pageid) ];
    NSURL *facebookURL = [NSURL URLWithString:str_url];
    if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) {
        [[UIApplication sharedApplication] openURL:facebookURL];
    } else {
        NSString *web_url = [NSString stringWithFormat:@"%@%@", @"https://www.facebook.com/", __makeNSString(name) ];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:web_url]];
    }
}



+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    NSString* path = (__bridge_transfer NSString *)(contextInfo);
    [[NSFileManager defaultManager] removeItemAtPath:path error:nil];

    NSLog(@"保存结束");
    if( error == nil )
    {
    }
    else
    {
        NSLog( @"Error saving image with UIImageWriteToSavedPhotosAlbum: %@", error );
    }
}
int _SavePhoto(char *readAddr)
{
    int result = 0;
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000
        if( CHECK_IOS_VERSION( @"14.0" ) )
        {
            result = [__NtNotificationWrapper requestPhotoPermissionNewest];
        }
        else
    #endif
            result = [__NtNotificationWrapper requestPhotoPermissionNew];
    if(result != 1)
    {
        return result;
    }
    
    NSString *strReadAddr = [NSString stringWithUTF8String:readAddr];
    UIImage *img = [UIImage imageWithContentsOfFile:strReadAddr];
    NSLog([NSString stringWithFormat:@"w:%f, h:%f", img.size.width, img.size.height]);
    UIImageWriteToSavedPhotosAlbum(img, nil, 
        @selector(image:didFinishSavingWithError:contextInfo:), nil);

    return 1;
}

+ (int)requestPhotoPermissionNew
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    
    if( status == PHAuthorizationStatusAuthorized )
        return 1;
    else if(status == PHAuthorizationStatusNotDetermined)
    {
        __block BOOL authorized = NO;
        
        dispatch_semaphore_t sema = dispatch_semaphore_create( 0 );
        [PHPhotoLibrary requestAuthorization:^( PHAuthorizationStatus status )
        {
            authorized = ( status == PHAuthorizationStatusAuthorized );
            dispatch_semaphore_signal( sema );
        }];
        dispatch_semaphore_wait( sema, DISPATCH_TIME_FOREVER );
        
        return authorized ? 1 : 0;
    }
    
    return 0;
}

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000
+ (int)requestPhotoPermissionNewest
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatusForAccessLevel:PHAccessLevelReadWrite];
    
    if( status == PHAuthorizationStatusAuthorized )
        return 1;
    else if( status == PHAuthorizationStatusLimited )
    {
        return 2;
    }
    else if( status == PHAuthorizationStatusNotDetermined )
    {
        [PHPhotoLibrary requestAuthorizationForAccessLevel:PHAccessLevelReadWrite handler:^( PHAuthorizationStatus status )
        {

        }];
        return 3;
    }
    return 0;
}
#endif