iOS object-c self关键字总结

news/2024/7/20 22:22:23 标签: ios, c语言, objective-c

在Objective-C中,self 关键字是一个指向当前对象的指针。它是对象自身实例的别名,通常在对象内部的方法中使用,以提供一个指向当前对象的引用。使用 self 可以帮助你访问对象的属性和方法,特别是在处理消息传递和方法调用时。

以下是 self 关键字的一些常见用途:

  1. 访问对象的属性

    objective-c">- (void)setSomeProperty:(NSString *)newValue {
        self.someProperty = newValue;
    }
    
  2. 在方法内部调用其他方法

    objective-c">- (void)doSomething {
        [self doSomethingElse];
    }
    
  3. 在初始化方法中

    objective-c">- (instancetype)init {
        self = [super init];
        if (self) {
            // 初始化代码
        }
        return self;
    }
    
  4. 在dealloc方法中

    objective-c">- (void)dealloc {
        // 清理代码,例如释放对象持有的其他对象
        [self release];
    }
    
  5. 在block中使用

    objective-c">__block __weak typeof(self) weakSelf = self;
    void (^myBlock)(void) = ^{
        [weakSelf doSomething];
    };
    
  6. 在代理和回调中

    objective-c">id<Delegate> delegate = self;
    
  7. 在响应链中

    objective-c">- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        [[self delegate] alertView:alertView clickedButtonAtIndex:buttonIndex];
    }
    

使用 self 可以提高代码的可读性,特别是当你需要明确指出是在操作当前对象时。此外,当在一个对象的方法内部使用 self 时,它也有助于避免潜在的编译器警告,尤其是在涉及对象初始化的情况下。

需要注意的是,在block中使用 self 时,应该使用 __block__weak 修饰符来避免强引用循环(retain cycle)。__block 用于在block内部修改变量的值,而 __weak 用于防止block捕获对象的强引用,从而避免内存泄漏。


http://www.niftyadmin.cn/n/5468861.html

相关文章

Maven所有版本下载地址注意事项

一、Maven下载地址 最新的版本 https://maven.apache.org/download.cgi 较老的版本【3.0.4以上】 https://archive.apache.org/dist/maven/maven-3 更老的版本【3.0.4以下】 https://archive.apache.org/dist/maven/binaries 二、Maven版本与JDK版本 Maven 3.8需要JDK …

React|获取oss存储的文件,并转为json格式

使用axios通过oss的url获取.xlsx文件流&#xff0c;处理后得到json格式数据&#xff1a; 安装xlsx&#xff1a; npm install xlsx import axios from "axios"; import * as XLSX from "xlsx";//#region xlsx(oss) to json async function getFileStream(u…

【前端】CSS(引入方式+选择器+常用元素属性+盒模型)

文章目录 CSS一、什么是CSS二、语法规范三、引入方式1.内部样式表2.行内样式表3.外部样式 四、选择器1.选择器的种类1.基础选择器&#xff1a;单个选择器构成的1.标签选择器2.类选择器3.id 选择器4.通配符选择器 2.复合选择器1.后代选择器2.子选择器3.并集选择器4.伪类选择器 五…

DLC原理解析及其优化思考

1. 引言 Discreet Log Contract (DLC) 是由麻省理工学院的Tadge Dryja在2018年提出的一套基于预言机的合约执行方案。DLC 允许两方根据预定义的条件进行有条件付款。各方确定可能的结果并进行预签名&#xff0c;并在预言机签署结果时使用这些预签名来执行支付。 因此&#xff…

openlayers 入门教程(九):overlay 篇

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

C++的并发世界(六)——互斥解决数据共享冲突

0.数据共享的问题 在多个线程中共享数据时。需要注意线程安全问题。如果多个线程同时访问同一个变量。并且其中至少有一个线程对该变量进行了写操作。那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃,产生来定义的结果,或者得到错误的热果。为了避免数据竞争问题。需要…

FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的例程主要测试本地的音视频文件&#xff0c;当然为了安全起见&#xff0c;很多网络视频都采用了https地址。FFmpeg若要访问https视频&#xff0c;就必须集成第三方的openssl库&#xff0c;但编译FFmpeg时却默认关闭了o…

抽象类与接口(3)(接口部分)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&…