在阅读本文时,我遇到了这个问题.
我的问题是参考下图:
一旦john设置为nil,Person实例就不再具有更强的引用,因此将被释放.但Apartment有两个强引用,其中一个是由Person实例上的属性很快就会被释放.我相信,这个强有力的参考在释放后仍然存在,并且代码无法实现.
因此,设置unit14A为nil将仅删除对Apartment实例的一个强引用,并且不应该取消分配,因为由于上述情况会有一个更强的引用.
但是,正如文件所说,Apartment实例很快就被解除了分配.对我来说,这只有在Person实例解除分配时才会将其公寓属性设置为nil,通过删除Apartment实例上的强引用.但我找不到任何文件来验证这一点.
那么,Apartment实例如何解除分配?来自Person实例公寓属性的强引用发生了什么?
有人能帮助我理解这个吗?
我只是试图通过丢弃代码来理解变量的生命.我可以看到_inside和_outside在实例化新实例时保留,而大括号不是.
@interface ViewController (){
NSString *_innBraces;
}
@end
NSString *_outside;
@implementation ViewController{
NSString *_inmBraces;
}
NSString *_inside;
-(id)initWithInside:(NSString*)inside outside:(NSString*)outside nBraces:(NSString*)nBraces mBraces:(NSString*)mBraces{
self = [super init];
if (self) {
_inside = inside;
_outside = outside;
_innBraces = nBraces;
_inmBraces = mBraces;
return self;
}else{
return nil;
}
}
Run Code Online (Sandbox Code Playgroud)
我直接从这个 Apple页面中提取了这个例子
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
Run Code Online (Sandbox Code Playgroud)
如果您将此结构的实例分配给常量,
let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
Run Code Online (Sandbox Code Playgroud)
它说我们不能改变它的属性值,即使它被声明为'var'
这让我想知道如何let实施?我希望在编译时可以检测到它的任何赋值并显示编译错误.但在上述情况下,为什么它适用于结构的每个属性,无论它是如何定义的?
我试图搜索这个,发现用关键字'let'搜索非常困难,因为这是很常见的术语.
任何人都可以帮我理解这个吗?
我正在尝试做一个非常简单的 blocTest 来测试初始状态。但低于错误。有趣的是,我确实有另一个工作组并在同一个项目中进行测试。我逐行检查以查看是否有任何不匹配,但一切看起来都很完美,除了“行为”之外,我正在其他地方而不是这里做,假设与此初始状态测试无关。知道为什么这个集团会发生这种情况吗?
Expected: [ReadyToAuthenticateState:ReadyToAuthenticateState()]
Actual: []
Which: at location [0] is [] which shorter than expected
Run Code Online (Sandbox Code Playgroud)
我的集体测试
late MockUserAuthenticationUseCase mockUsecase;
late UserAuthenticationBloc authBloc;
setUp(() {
mockUsecase = MockUserAuthenticationUseCase();
authBloc = UserAuthenticationBloc(usecase: mockUsecase);
});
blocTest<UserAuthenticationBloc, UserAuthenticationState>(
'emits [MyState] when MyEvent is added.',
build: () => authBloc,
expect: () => <UserAuthenticationState>[ReadyToAuthenticateState()],
);
Run Code Online (Sandbox Code Playgroud)
我的集团
class UserAuthenticationBloc
extends Bloc<UserAuthenticationEvent, UserAuthenticationState> {
final UserAuthenticationUseCase usecase;
UserAuthenticationBloc({required this.usecase})
: super(ReadyToAuthenticateState()) {
on<UserAuthenticationEvent>((event, emit) {
if (event is AuthenticateUserWithCredentialsEvent) {
_processReadyToAuthenticateEvent(event);
}
});
}
void _processReadyToAuthenticateEvent( …Run Code Online (Sandbox Code Playgroud)